Cloud, κινητά και IoT — Έννοιες
Η περίμετρος δεν είναι πια ένα κτίριο και ένα firewall. Τα δεδομένα ζουν σε έναν πάροχο, ο πελάτης τρέχει στην τσέπη του χρήστη, και το εσωτερικό δίκτυο φιλοξενεί κάμερες που δεν έχουν δει διόρθωση από το 2019. Αυτό το μάθημα θέτει τις έννοιες. Το lab Flutter του 11.2 και 11.3 εφαρμόζει το κομμάτι για κινητά. Το κεφάλαιο 11.5 πραγματεύεται WiFi και κάμερες. Εδώ, μαθαίνουμε να ιεραρχούμε πριν ανοίξουμε κάποιο εργαλείο.
Ένα pentest cloud στοχεύει τον λογαριασμό του πελάτη: IAM, buckets, συναρτήσεις, κλειδιά. Δεν στοχεύει τον hypervisor, το datacenter ούτε το API του παρόχου. Το RoE το λέει σε μία γραμμή. Το να βγείτε από αυτό το πλαίσιο σημαίνει να επιτίθεστε σε τρίτο μέρος.
Τι θα ξέρετε να κάνετε
- Να τοποθετείτε κάθε εύρημα στο μοντέλο κοινής ευθύνης: τι μπορεί να διορθώσει ο πελάτης, τι πρέπει να απαιτήσει από τον πάροχο.
- Να αναγνωρίζετε τα τρία λάθη cloud που ακόμα κοστίζουν το 2026: υπερβολικά ανοιχτό IAM, εκτεθειμένη αποθήκευση, μυστικά σε καθαρό κείμενο.
- Να ονομάζετε τις επιφάνειες κινητών (binary, τοπική αποθήκευση, pinning) χωρίς να συγχέετε την προστασία πελάτη με τον έλεγχο διακομιστή.
- Να αξιολογείτε έναν στόχο IoT με τρεις ερωτήσεις: προεπιλεγμένος λογαριασμός, υπηρεσία σε καθαρό κείμενο, ανακτήσιμο firmware.
1. Γιατί αυτές οι τρεις επιφάνειες μαζί
Cloud, κινητά και IoT δεν έχουν το ίδιο stack. Μοιράζονται μια κοινή μετατόπιση: το σύνορο εμπιστοσύνης έχει εγκαταλείψει το δίκτυο.
| Επιφάνεια | Τι ελέγχει ο επιτιθέμενος | Συνέπεια |
|---|---|---|
| Cloud | Συχνά τίποτα στην αρχή — ψάχνει ένα κλειδί, έναν ρόλο, ένα bucket | Το λάθος είναι μια πολιτική, όχι ένα buffer overflow |
| Κινητά | Ολόκληρη τη συσκευή, αν το θελήσει (root, emulator, proxy) | Κάθε μυστικό στον πελάτη θα βγει στην επιφάνεια |
| IoT | Το αντικείμενο, τη ραδιοσυχνότητα, ενίοτε τη σειριακή θύρα | Τα θεμελιώδη αρκούν: εργοστασιακές προεπιλογές, HTTP, firmware |
Ένα κλασικό pentest web υποθέτει έναν διακομιστή που δεν κατέχετε και έναν browser που ελέγχετε εν μέρει. Σε κινητά, ο πελάτης βρίσκεται στον αντίπαλο. Στο cloud, ο «διακομιστής» είναι μια πολιτική JSON. Στο IoT, ο διακομιστής είναι μερικές φορές ένα Linux 3.10 που έχει μεταγλωττιστεί το 2018. Οι τεχνικές αλλάζουν· η ερώτηση παραμένει: πού έχει τοποθετηθεί η εμπιστοσύνη, και αντέχει;
2. Cloud — το μοντέλο κοινής ευθύνης
Ο πάροχος ασφαλίζει το cloud. Ο πελάτης ασφαλίζει αυτό που τοποθετεί στο cloud. Το σύνορο μετακινείται ανάλογα με την υπηρεσία.
| Επίπεδο | IaaS (EC2, Compute) | PaaS (RDS, App Service) | SaaS (M365, Salesforce) |
|---|---|---|---|
| Δεδομένα και ταξινόμηση | Πελάτης | Πελάτης | Πελάτης |
| Ταυτότητες, κλειδιά, IAM | Πελάτης | Πελάτης | Πελάτης + πάροχος |
| Λειτουργικό σύστημα | Πελάτης | Πάροχος | Πάροχος |
| Εφαρμοστικό patch | Πελάτης | Κοινό | Πάροχος |
| Εικονικό δίκτυο, SG, NSG | Πελάτης | Κοινό | Πάροχος |
| Datacenter, υλικό | Πάροχος | Πάροχος | Πάροχος |
Τι αλλάζει αυτό για την αναφορά. Ένα δημόσιο bucket S3, μια
πολιτική Action: "*" σε Resource: "*", ένα κλειδί πρόσβασης
που έχει γίνει commit στο Git: αυτό είναι 100% ευθύνη του πελάτη. Ένα 0-day στον
hypervisor Xen: εκτός πεδίου. Ένας μαθητής που γράφει «η AWS είναι
ευάλωτη» έχασε το μοντέλο. Πρέπει να γράψει «ο λογαριασμός
prod-backup επιτρέπει s3:GetObject σε Principal: "*".»
Η περίμετρος διαπραγματεύεται πριν το σκανάρισμα: λογαριασμοί και
συνδρομές εντός πεδίου, περιοχές, απαγόρευση επίθεσης στα
endpoints του παρόχου, απαγόρευση DoS στα API τιμολόγησης. Τα Pacu, Prowler, ScoutSuite και AzureHound δουλεύουν
με τα credentials του πελάτη, όχι εναντίον του amazonaws.com.
3. Cloud — τα τρία λάθη που κοστίζουν
Τα εφαρμοστικά CVE εξακολουθούν να υπάρχουν. Η συντριπτική πλειοψηφία των περιστατικών cloud αυτών των πέντε ετών προέρχεται από κάτι άλλο: μια υπερβολικά ευρεία ταυτότητα, μια προσβάσιμη αποθήκευση χωρίς λογαριασμό, ένα μυστικό που δεν έπρεπε ποτέ να είναι αρχείο.
3.1. Υπερβολικά επιτρεπτικό IAM
Το IAM είναι το πραγματικό λειτουργικό σύστημα του cloud. Μια πολιτική που λέει «τα πάντα, παντού» μετατρέπει ένα κλεμμένο κλειδί σε διαχείριση του λογαριασμού.
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
Αυτό το διπλό αστεράκι δεν είναι συντόμευση εργαστηρίου. Το συναντάμε σε ρόλους ενσωμάτωσης, σε «προσωρινούς» χρήστες του 2019 και σε inline πολιτικές που τοποθετήθηκαν ένα βράδυ Παρασκευής. Παραλλαγές που αξίζουν το ίδιο εύρημα:
Action: "s3:*"σε όλα τα buckets, συμπεριλαμβανομένων αυτών ενός άλλου έργου.- Μια trust policy που δέχεται
sts:AssumeRoleαπό έναν συνεργαζόμενο λογαριασμό χωρίς όρο ExternalId. - Ανθρώπινα κλειδιά πρόσβασης IAM, ηλικίας δύο ετών, χωρίς εναλλαγή, κολλημένα σε ένα Jenkins.
Τι σταματά αυτό, συγκεκριμένα: το ελάχιστο προνόμιο που ονομάζεται
(s3:GetObject σε arn:aws:s3:::factures-2026/*), ρόλοι που αναλαμβάνονται
για σύντομη διάρκεια, MFA στην κονσόλα, απαγόρευση των
μακρόχρονων κλειδιών υπέρ ρόλων instance ή OIDC CI/CD.
Εργαλεία επισκόπησης, πρώτα σε λειτουργία ανάγνωσης:
| Εργαλείο | Στόχος | Χρήση |
|---|---|---|
prowler | AWS | Έλεγχοι CIS / εύρημα έτοιμο για την αναφορά |
scoutsuite | AWS, Azure, GCP | Χαρτογράφηση multi-cloud |
pacu | AWS | Επιθετικά modules στον εξουσιοδοτημένο λογαριασμό |
azure-hound | Entra ID | Γράφημα διαδρομών προς έναν ρόλο Global Admin |
Ξεκινάμε με το Prowler ή το ScoutSuite. Το Pacu έρχεται μετά, για να αποδείξει τον αντίκτυπο ενός ήδη εντοπισμένου ρόλου — όχι για να «δούμε τι περνάει».
3.2. Εκτεθειμένη αποθήκευση
Ένα bucket S3, ένα Blob container, ένα bucket GCS: τρία ονόματα, ένα
λάθος. Το αντικείμενο είναι προσβάσιμο χωρίς αυθεντικοποίηση, ή με
ACL AllUsers / anonymous.
aws s3 ls s3://sauvegardes-prod-acme --no-sign-request
Αν αυτή η γραμμή απαριθμεί prefixes, το εύρημα είναι ήδη Κρίσιμο. Δεν έχετε «χακάρει την AWS». Διαβάσατε έναν πόρο που ο πελάτης έκανε δημόσιο. Οι παραλλαγές:
- Δημόσια λίστα, αυθεντικοποιημένη ανάγνωση: ο επιτιθέμενος χαρτογραφεί, μετά ψάχνει ένα κλειδί αλλού.
- Προϋπογεγραμμένο URL έγκυρο για 7 ημέρες, σταλμένο με email, επαναχρησιμοποιήσιμο.
- Λογαριασμός αποθήκευσης Azure με κλειδί σε μια μεταβλητή εφαρμογής, η οποία με τη σειρά της βρίσκεται σε ένα αποθετήριο.
Η αποκατάσταση δεν είναι «ενεργοποίηση κρυπτογράφησης». Το SSE-S3 κρυπτογραφεί σε ηρεμία για τον πάροχο· ένα δημόσιο αντικείμενο παραμένει αναγνώσιμο. Αυτό που κλείνει την τρύπα: αποκλεισμός δημόσιων ACL (Block Public Access), ρητές πολιτικές bucket, πρόσβαση μέσω ρόλου, ενεργοποιημένα logs πρόσβασης.
3.3. Μυστικά σε καθαρό κείμενο — και η συντόμευση των μεταδεδομένων
Τρία σημεία όπου ένα κλειδί πρόσβασης εξακολουθεί να βρίσκεται:
- Ένα αποθετήριο Git (συμπεριλαμβανομένου του ιστορικού: το
git rmδεν το διαγράφει). - Μια μεταβλητή περιβάλλοντος που έχει εισαχθεί σε ένα ticket Jira, ένα screenshot Confluence, μια εργασία CI σε καθαρό κείμενο.
- Η υπηρεσία μεταδεδομένων instance.
Κάθε VM cloud εκθέτει έναν τοπικό σύνδεσμο, συχνά
http://169.254.169.254/. Μια εφαρμογή που κάνει fetch σε ένα URL
που παρέχεται από τον χρήστη (εισαγωγή εικόνας, webhook, PDF) μπορεί
να ωθηθεί προς αυτή τη διεύθυνση: αυτό είναι ένα SSRF που κλέβει τον
ρόλο του μηχανήματος. Στην AWS, το IMDSv2 (υποχρεωτικό token, περιορισμένο hop)
μειώνει σημαντικά το παράθυρο. Το IMDSv1 παραμένει η προεπιλογή
πολλών παλιών AMI.
GET http://169.254.169.254/latest/meta-data/iam/security-credentials/
Αν αυτό το URL απαντά από την εφαρμογή, το εύρημα δεν είναι «θεωρητικό SSRF». Είναι κατάληψη του ρόλου EC2, άρα συχνά ανάγνωση S3, ενίοτε assume ενός υψηλότερου ρόλου. Η ενότητα 7 το κατέταξε ως A10. Εδώ, το συνδέετε με το cloud: το μυστικό δεν ήταν στον κώδικα, ήταν προσαρτημένο στο instance.
4. Κινητά — ο πελάτης δεν είναι σύνορο
Ουσιώδης διαφορά με το web: το binary τρέχει σε μια συσκευή που ο επιτιθέμενος μπορεί να κατέχει. Root, emulator, proxy TLS, dump μνήμης. Το να σχεδιάζετε την ασφάλεια ως «κανείς δεν θα αποσυμπιλήσει το APK» είναι μια λανθασμένη υπόθεση.
Μια οθόνη που κρύβει ένα κουμπί admin δεν είναι έλεγχος
πρόσβασης. Το API πρέπει να αρνηθεί. Το μάθημα 11.2 το δείχνει
σε μια εφαρμογή Flutter: το dashboard εμφανίζεται, ο διακομιστής επιστρέφει 401.
Μην συγχέετε τα δύο.
Τρεις επιφάνειες επανέρχονται σε σχεδόν κάθε αποστολή για κινητά.
4.1. Το binary — APK, IPA, bundle
Ένα APK είναι ένα zip. Το apktool το αποσυναρμολογεί, το jadx το αποσυμπιλεί
σε αναγνώσιμη Java. Οι σταθερές (URL API, κλειδί «premium»,
feature flag, debug endpoint) επιβιώνουν της μεταγλώττισης.
apktool d application.apk -o apk-out
jadx -d jadx-out application.apk
strings application.apk | grep -iE 'api_key|secret|password|http'
Στο Flutter, ο κώδικας Dart ζει στο libapp.so (ή στο
main.dart.js για το build web). Το αντανακλαστικό είναι το ίδιο:
αναζήτηση συμβολοσειρών, όχι «σπάσιμο» του framework. Η
επίδειξη 11.2 ξεκινά από αυτό το grep. Εδώ, κρατήστε τον κανόνα:
αν το backend χρειάζεται ένα μυστικό, αυτό το μυστικό δεν έχει καμία δουλειά
στον πελάτη. Ένα κλειδί API στο APK δεν είναι πλέον κλειδί.
Στο iOS, το IPA αποσυμπιέζεται· τα Info.plist και τα binaries
Swift/Obj-C παραδίδουν τα ίδια URL. Το jailbreak δεν είναι
απαραίτητο για τη στατική επισκόπηση.
4.2. Η τοπική αποθήκευση
Η εφαρμογή γράφει στον δίσκο. Ένας επιτιθέμενος που έχει τη συσκευή (ή ένα μη κρυπτογραφημένο backup) διαβάζει:
| Πλατφόρμα | Τυπική τοποθεσία | Συχνή παγίδα |
|---|---|---|
| Android | SharedPreferences XML, βάσεις SQLite | Token συνεδρίας σε καθαρό κείμενο, κωδικός «για ευκολία» |
| iOS | UserDefaults, αρχεία plist, Keychain λανθασμένα χρησιμοποιημένο | Μυστικό στο UserDefaults αντί για το Keychain |
| Flutter | shared_preferences, αρχεία εφαρμογής | Το ίδιο λάθος, cross-platform API |
Το Keychain / Keystore μπορεί να κρατήσει ένα μυστικό. Πρέπει όμως να χρησιμοποιηθεί, με επίπεδο προστασίας που απαιτεί το ξεκλείδωμα του τηλεφώνου. Μια προτίμηση XML δεν προσφέρει καμία από αυτές τις εγγυήσεις.
4.3. Certificate pinning — τι κάνει, τι δεν κάνει
Χωρίς pinning, ένα proxy (Burp, mitmproxy) υποκλέπτει το TLS μόλις ο χρήστης αποδεχτεί μια CA επιχείρησης — ή μόλις ο επιτιθέμενος ελέγχει τη συσκευή. Το pinning προσθέτει έναν έλεγχο: το πιστοποιητικό (ή το δημόσιο κλειδί) πρέπει να ταιριάζει με αυτό που η εφαρμογή έχει ενσωματώσει.
Τρεις χρήσιμες αναγνώσεις:
- Απουσία pinning: η υποκλοπή TLS είναι τετριμμένη σε μια συσκευή που ελέγχετε. Αυτή είναι η προεπιλεγμένη περίπτωση.
- Παρουσία pinning: αυτό επιβραδύνει τη δυναμική ανάλυση. Δεν
κάνει το API ασφαλές. Τα Frida και Objection εξακολουθούν να αγκιστρώνουν
TrustManager/boringsslστην πλειοψηφία των εφαρμογών. Το pinning είναι τριβή, όχι σύνορο. - Pinning + μυστικά στο APK: απλώς κάνατε το grep λίγο πιο μακρύ.
Εργαλεία της επισκόπησης κινητών, με αυτή τη σειρά: στατική (apktool,
jadx, strings) μετά δυναμική (frida, objection) στο
lab ή στην εφαρμογή του πελάτη. Το εργαστήριο 11.3 προτείνει ένα bonus
APK εκτός Docker για όσους θέλουν το ίδιο αντανακλαστικό σε ένα
native binary.
5. IoT — τα θεμελιώδη αρκούν
Ένα pentest IoT απογοητεύει όσους περιμένουν ένα 0-day ραδιοσυχνότητας. Καθησυχάζει όσους έχουν ήδη κάνει σκλήρυνση Windows: επιστρέφουμε σε εργοστασιακούς λογαριασμούς, HTTP, ένα λήψιμο firmware.
Τρεις ερωτήσεις, με αυτή τη σειρά.
5.1. Προεπιλεγμένος λογαριασμός
admin:admin, root:vizxv, admin:12345. Οι δημόσιες συλλογές
(RouterSploit, λίστες CVE κατασκευαστή) καλύπτουν
μια δεκαετία μοντέλων. Αν ο κωδικός δεν είναι μοναδικός ανά
συσκευή στην έξοδο από το εργοστάσιο, το εύρημα είναι το ίδιο με το
Mirai το 2016. Η αποκατάσταση είναι οργανωτική: απογραφή,
υποχρεωτική αλλαγή στην πρώτη σύνδεση, απόσυρση του υλικού
για το οποίο ο κατασκευαστής δεν παρέχει πλέον διόρθωση.
5.2. Μη κρυπτογραφημένη υπηρεσία
Telnet, HTTP διαχείρισης, MQTT χωρίς TLS, ροή βίντεο χωρίς
αυθεντικοποίηση. Ένας επιτιθέμενος στο ίδιο LAN (ή στο WAN
αν το UPnP άνοιξε μια θύρα) διαβάζει τη συνεδρία. Η κρυπτογράφηση δεν
αντικαθιστά την αυθεντικοποίηση: ένα RTSP σε TLS με
admin:admin πέφτει ούτως ή άλλως.
5.3. Ανακτήσιμο firmware
Πολλοί κατασκευαστές δημοσιεύουν το .bin στον ιστότοπό τους, ή
η διεπαφή το σερβίρει στο /upgrade. Το binwalk εξάγει το σύστημα
αρχείων. Το strings βγάζει ιδιωτικά κλειδιά, hardcoded κωδικούς,
μη υπογεγραμμένα URL ενημέρωσης.
binwalk -e firmware.bin
strings firmware.bin | grep -iE 'admin|password|private|BEGIN RSA'
Ένα μυστικό στο firmware είναι μυστικό για ολόκληρο τον στόλο του ίδιου μοντέλου. Είναι το αντίστοιχο IoT του κλειδιού στο APK.
Η ραδιοσυχνότητα, το WPA2-PSK, το PMKID, το deauth και η τυπική αλυσίδα σε μια κάμερα IP εξετάζονται στο μάθημα 11.5. Αυτή η σελίδα δεν τα επαναλαμβάνει. Κρατήστε μόνο τον σύνδεσμο: αν πέσει το WiFi, το αντικείμενο πέφτει μέσα στο λεπτό. Η άμυνα που αντέχει ξεκινά με τη τμηματοποίηση (VLAN / SSID IoT) και την απογραφή, όχι με ένα antivirus στην κάμερα.
6. Πώς ιεραρχούμε σε αποστολή
Μια εβδομάδα pentest δεν καλύπτει «το cloud, τα κινητά και το IoT». Επιλέγουμε με βάση το RoE και την αξία.
| Πλαίσιο πελάτη | Υψηλή προτεραιότητα | Τι δεν κάνουμε πρώτα |
|---|---|---|
| SaaS σε AWS | IAM, buckets, μεταδεδομένα, κλειδιά Git | Kernel του AMI |
| Εφαρμογή κινητών + API | Bundle, τοπική αποθήκευση, έλεγχοι API | 0-day του store |
| Στόλος αισθητήρων | Εργοστασιακές προεπιλογές, HTTP, τμηματοποίηση | Εξωτικά ραδιοπρωτόκολλα |
| ΜΜΕ με κάμερες | Δείτε 11.5: WiFi, RTSP, εργοστασιακοί κωδικοί | Μη δημόσιο exploit κατασκευαστή |
Η αναφορά IoT επιμένει περισσότερο από τις άλλες στις οργανωτικές αποκαταστάσεις: απογραφή, VLAN, κύκλος ενημέρωσης, απαγόρευση UPnP. Ένα firmware patch που ο κατασκευαστής δεν θα δημοσιεύσει ποτέ δεν είναι μια εφαρμόσιμη σύσταση.
7. Οι συγχύσεις που κοστίζουν χρόνο
- «Το cloud είναι ασφαλές, άρα το S3 μου είναι.» Ο πάροχος ασφαλίζει τη βάση. Το ACL είναι δική σας ευθύνη.
- «Έχουμε obfuscate-άρει το APK.» Το obfuscation καθυστερεί έναν άνθρωπο.
Δεν αφαιρεί ένα κλειδί από το apk. Το
stringsσυχνά αρκεί. - «Το pinning αντικαθιστά την server-side auth.» Όχι. Ενοχλεί το proxy. Το IDOR παραμένει IDOR.
- «IoT = προηγμένη ραδιοεπίθεση.» Το 2026, η πλειοψηφία των αποστολών IoT κλείνει με έναν εργοστασιακό κωδικό και μια θύρα 80.
- «Το Pacu εναντίον της AWS.» Το Pacu εναντίον του λογαριασμού του πελάτη, με ένα κλειδί που σας έδωσε ο πελάτης, μέσα στην περίμετρο που έχει γραφτεί.
Τι πρέπει να θυμάστε
Το cloud, τα κινητά και το IoT διαβάζονται με το ίδιο πλέγμα: ποιος φέρει την ευθύνη, πού κατοικεί το μυστικό, και τι ελέγχει ήδη ένας επιτιθέμενος. Στο cloud, η απάντηση είναι σχεδόν πάντα μια πολιτική (IAM, bucket, κλειδί, μεταδεδομένα). Σε κινητά, ό,τι ζει στον πελάτη θα καταλήξει έξω· ο πραγματικός έλεγχος είναι το API. Στο IoT, τα θεμελιώδη — εργοστασιακές προεπιλογές, HTTP, firmware — κλείνουν περισσότερα περιστατικά από ένα exploit πρωτοκόλλου.
Επόμενο μάθημα: εφαρμόζουμε το πλέγμα κινητών σε μια εφαρμογή Flutter σκόπιμα αδύναμη, από το grep του bundle μέχρι το flag admin.