Skip to main content

Cloud, κινητά και IoT — Έννοιες

Η περίμετρος δεν είναι πια ένα κτίριο και ένα firewall. Τα δεδομένα ζουν σε έναν πάροχο, ο πελάτης τρέχει στην τσέπη του χρήστη, και το εσωτερικό δίκτυο φιλοξενεί κάμερες που δεν έχουν δει διόρθωση από το 2019. Αυτό το μάθημα θέτει τις έννοιες. Το lab Flutter του 11.2 και 11.3 εφαρμόζει το κομμάτι για κινητά. Το κεφάλαιο 11.5 πραγματεύεται WiFi και κάμερες. Εδώ, μαθαίνουμε να ιεραρχούμε πριν ανοίξουμε κάποιο εργαλείο.

Δεν κάνετε pentest στην AWS

Ένα 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.

Εργαλεία επισκόπησης, πρώτα σε λειτουργία ανάγνωσης:

ΕργαλείοΣτόχοςΧρήση
prowlerAWSΈλεγχοι CIS / εύρημα έτοιμο για την αναφορά
scoutsuiteAWS, Azure, GCPΧαρτογράφηση multi-cloud
pacuAWSΕπιθετικά modules στον εξουσιοδοτημένο λογαριασμό
azure-houndEntra 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. Μυστικά σε καθαρό κείμενο — και η συντόμευση των μεταδεδομένων​

Τρία σημεία όπου ένα κλειδί πρόσβασης εξακολουθεί να βρίσκεται:

  1. Ένα αποθετήριο Git (συμπεριλαμβανομένου του ιστορικού: το git rm δεν το διαγράφει).
  2. Μια μεταβλητή περιβάλλοντος που έχει εισαχθεί σε ένα ticket Jira, ένα screenshot Confluence, μια εργασία CI σε καθαρό κείμενο.
  3. Η υπηρεσία μεταδεδομένων 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» είναι μια λανθασμένη υπόθεση.

Η προστασία στον πελάτη εξυπηρετεί το design

Μια οθόνη που κρύβει ένα κουμπί 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) διαβάζει:

ΠλατφόρμαΤυπική τοποθεσίαΣυχνή παγίδα
AndroidSharedPreferences XML, βάσεις SQLiteToken συνεδρίας σε καθαρό κείμενο, κωδικός «για ευκολία»
iOSUserDefaults, αρχεία plist, Keychain λανθασμένα χρησιμοποιημένοΜυστικό στο UserDefaults αντί για το Keychain
Fluttershared_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.

WiFi και κάμερες: ξεχωριστό κεφάλαιο

Η ραδιοσυχνότητα, το WPA2-PSK, το PMKID, το deauth και η τυπική αλυσίδα σε μια κάμερα IP εξετάζονται στο μάθημα 11.5. Αυτή η σελίδα δεν τα επαναλαμβάνει. Κρατήστε μόνο τον σύνδεσμο: αν πέσει το WiFi, το αντικείμενο πέφτει μέσα στο λεπτό. Η άμυνα που αντέχει ξεκινά με τη τμηματοποίηση (VLAN / SSID IoT) και την απογραφή, όχι με ένα antivirus στην κάμερα.

6. Πώς ιεραρχούμε σε αποστολή​

Μια εβδομάδα pentest δεν καλύπτει «το cloud, τα κινητά και το IoT». Επιλέγουμε με βάση το RoE και την αξία.

Πλαίσιο πελάτηΥψηλή προτεραιότηταΤι δεν κάνουμε πρώτα
SaaS σε AWSIAM, buckets, μεταδεδομένα, κλειδιά GitKernel του AMI
Εφαρμογή κινητών + APIBundle, τοπική αποθήκευση, έλεγχοι API0-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.