Ασφάλεια στη φορητή ανάπτυξη: τι είναι, ποιες απειλές υπάρχουν και πώς να αμυνθείτε

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-03-28 Χρόνος ανάγνωσης: 12 λεπ

Η φορητή ασφάλεια είναι ένα σύνολο μέτρων για την προστασία της εφαρμογής, των δεδομένων χρήστη και της υποδομής διακομιστή από επιθέσεις και διαρροές. Σύμφωνα με το OWASP Mobile Top 10 (2024), η μη ασφαλής αποθήκευση δεδομένων παραμένει η πιο κοινή ευπάθεια σε φορητές εφαρμογές. Σε αυτό το άρθρο θα εξετάσουμε τις κύριες απειλές, τις μεθόδους κρυπτογράφησης, την ασφαλή αποθήκευση, την ταυτοποίηση και την προστασία κώδικα — όλα όσα πρέπει να γνωρίζει ένας αρχάριος προγραμματιστής.

Βασικά Σημεία

  • OWASP Mobile Top 10 — μια λίστα των κύριων ευπαθειών φορητών εφαρμογών, που ενημερώνεται κάθε 2–3 χρόνια.
  • AES — συμμετρική κρυπτογράφηση για αποθήκευση δεδομένων στη συσκευή· RSA — ασύμμετρη για μετάδοση.
  • Το iOS χρησιμοποιεί Keychain για ασφαλή αποθήκευση διακριτικών και κωδικών πρόσβασης, το Android χρησιμοποιεί Keystore.
  • OAuth 2.0 και JWT — πρότυπα ταυτοποίησης και ανταλλαγής διακριτικών μεταξύ εφαρμογής και διακομιστή.
  • ProGuard / R8 — εργαλεία συσκότισης που δυσχεραίνουν την αντίστροφη μηχανική και το RASP προστατεύει από επιθέσεις κατά τον χρόνο εκτέλεσης.

Κύριες Απειλές: OWASP Mobile Top 10

Τι είναι το OWASP Mobile Top 10;

OWASP (Open Web Application Security Project) είναι ένας μη κερδοσκοπικός οργανισμός που δημοσιεύει μια κατάταξη των πιο επικίνδυνων ευπαθειών φορητής ασφάλειας. Το OWASP Mobile Top 10 είναι μια λίστα που βοηθά τους προγραμματιστές να κατανοήσουν σε τι πρέπει να επικεντρωθούν πρώτα. Στην έκδοση του 2024, τα προβλήματα που σχετίζονται με τη μη ασφαλή αποθήκευση, την αδύναμη ταυτοποίηση και τη μη ασφαλή επικοινωνία δικτύου πρωτοστατούν στην κατάταξη.

M1: Μη ασφαλής αποθήκευση δεδομένων — το πιο κοινό πρόβλημα: κωδικοί πρόσβασης, διακριτικά και προσωπικά δεδομένα παραμένουν σε SharedPreferences, NSUserDefaults ή τοπικά αρχεία χωρίς κρυπτογράφηση. M2: Αδύναμη ταυτοποίηση — έλλειψη επαλήθευσης από την πλευρά του διακομιστή, αδύναμοι κωδικοί πρόσβασης. M3: Μη ασφαλής επικοινωνία δικτύου — έλλειψη HTTPS ή λανθασμένη επαλήθευση πιστοποιητικού SSL. Τα M4 και M5 σχετίζονται με κρυπτογραφία και λανθασμένη χρήση API.

M6: Μη ασφαλής εξουσιοδότηση — ένας χρήστης μπορεί να αποκτήσει πρόσβαση σε δεδομένα άλλου χρήστη αντικαθιστώντας ένα αναγνωριστικό σε ένα αίτημα. M7: Ενέσεις κώδικα (SQL Injection, XSS). M8: Χειρισμός εφαρμογής — ανασυσκευασία, αντικατάσταση κώδικα. M9 και M10 — διαρροή δεδομένων μέσω βιβλιοθηκών τρίτων και αντίστροφη μηχανική. Για καθεμία από αυτές τις απειλές υπάρχουν αποδεδειγμένα αντίμετρα και στην IT Sectr τα εφαρμόζουμε σε όλα τα έργα από το 2017.

Επιθέσεις Man-in-the-Middle (MITM)

Επίθεση MITM συμβαίνει όταν ένας εισβολέας υποκλέπτει την κίνηση μεταξύ της εφαρμογής και του διακομιστή. Αυτό είναι δυνατό μέσω πλαστογραφίας DNS, ARP spoofing ή σύνδεσης σε ένα μη ασφαλές δίκτυο Wi-Fi. Για προστασία χρησιμοποιούνται πιστοποιητικά SSL/TLS και Certificate Pinning.

Certificate Pinning είναι ένας μηχανισμός όπου η εφαρμογή επαληθεύει ότι το πιστοποιητικό του διακομιστή ταιριάζει με ένα προαποθηκευμένο στον κώδικα της εφαρμογής. Ακόμα κι αν ένας εισβολέας αντικαταστήσει το πιστοποιητικό μέσω ενός διαμεσολαβητή (π.χ. Burp Suite), η εφαρμογή θα απορρίψει τη σύνδεση. Το Pinning είναι δύο τύπων: Public Key Pinning και Certificate Hash Pinning.

Κρυπτογράφηση και Κατακερματισμός: AES, RSA, SSL/TLS

Συμμετρική Κρυπτογράφηση: AES

AES (Advanced Encryption Standard) είναι ένας συμμετρικός αλγόριθμος κρυπτογράφησης, το θεμέλιο της ασφάλειας δεδομένων στη συσκευή. Το AES χρησιμοποιεί το ίδιο κλειδί για κρυπτογράφηση και αποκρυπτογράφηση δεδομένων. Το AES υποστηρίζει κλειδιά μήκους 128, 192 ή 256 bit. Στη φορητή ανάπτυξη, το AES-256 χρησιμοποιείται για κρυπτογράφηση δεδομένων στη συσκευή: αρχεία, προσωρινή μνήμη, εγγραφές στην τοπική βάση δεδομένων.

Λειτουργίες AES: GCM (συνιστάται) — παρέχει ταυτοποίηση δεδομένων, CBC — βασική λειτουργία με αλυσίδα μπλοκ, ECB — μη ασφαλής, μην τη χρησιμοποιείτε. Για iOS, το AES είναι διαθέσιμο μέσω CommonCrypto (CCOptions), για Android — μέσω Cipher στην Java Cryptography Architecture (JCA). Σημαντικό: το κλειδί κρυπτογράφησης δεν πρέπει ποτέ να αποθηκεύεται στον κώδικα της εφαρμογής — χρησιμοποιήστε Keychain/Keystore.

Ασύμμετρη Κρυπτογράφηση: RSA — χρησιμοποιεί ένα ζεύγος κλειδιών (δημόσιο και ιδιωτικό). Το RSA χρησιμοποιείται για κρυπτογράφηση μικρών όγκων δεδομένων — συνήθως για ανταλλαγή συμμετρικού κλειδιού μεταξύ πελάτη και διακομιστή. Το ελάχιστο μήκος κλειδιού RSA είναι 2048 bit (συνιστάται 4096). Στο iOS, το RSA είναι διαθέσιμο μέσω Security Framework (SecKeyCreateRandomKey), στο Android — μέσω KeyPairGenerator στο Android Keystore.

Κατακερματισμός και SSL/TLS

Κατακερματισμός (SHA-256, SHA-3) είναι ένας μη αναστρέψιμος μετασχηματισμός δεδομένων σε μια συμβολοσειρά σταθερού μήκους. Οι τιμές κατακερματισμού χρησιμοποιούνται για επαλήθευση ακεραιότητας δεδομένων και αποθήκευση κωδικών πρόσβασης. Για κωδικούς πρόσβασης, χρησιμοποιήστε υποχρεωτικά bcrypt, scrypt ή Argon2 — το απλό SHA-256 είναι ευάλωτο σε επιθέσεις με ουράνια τραπέζια. SSL/TLS είναι ένα πρωτόκολλο κρυπτογράφησης της κυκλοφορίας δικτύου μεταξύ πελάτη και διακομιστή. Το σύγχρονο πρότυπο είναι TLS 1.3, το οποίο παρέχει Perfect Forward Secrecy (PFS).

TLS 1.3 είναι ταχύτερο από τους προκατόχους του: η χειραψία διαρκεί έναν γύρο αντί για δύο. Στο Android, η ελάχιστη έκδοση TLS διαμορφώνεται μέσω SSLSocket, στο iOS — μέσω ATS (App Transport Security), το οποίο από προεπιλογή απαιτεί TLS 1.2 ή υψηλότερο. Η απενεργοποίηση του ATS είναι δυνατή μόνο για συγκεκριμένους τομείς με αιτιολόγηση.

Ασφαλής Αποθήκευση: Keychain και Keystore

iOS: Keychain

Keychain (Μπρελόκ) είναι ένα ασφαλές αποθετήριο στο iOS / macOS για κωδικούς πρόσβασης, κλειδιά κρυπτογράφησης, πιστοποιητικά και διακριτικά. Τα δεδομένα στο Keychain κρυπτογραφούνται με ένα κλειδί υλικού μοναδικό για κάθε συσκευή. Η πρόσβαση στο Keychain ελέγχεται μέσω Security Framework (SecItemAdd, SecItemCopyMatching). Το Keychain κλειδώνεται αυτόματα όταν η συσκευή κλειδωθεί και κρυπτογραφείται χρησιμοποιώντας το Secure Enclave.

Android: Keystore

Android Keystore είναι ένα αποθετήριο συστήματος για κρυπτογραφικά κλειδιά, απομονωμένο από την εφαρμογή. Από το Android 6.0 (API 23), το Keystore χρησιμοποιεί υποστήριξη υλικού (TEE — Trusted Execution Environment) σε συσκευές με τσιπ ασφαλείας. Τα κλειδιά στο Keystore δεν εγκαταλείπουν ποτέ την ασφαλή περιοχή — η εφαρμογή λαμβάνει μόνο μια λαβή για λειτουργίες κρυπτογράφησης και υπογραφής.

Σύγκριση Keychain (iOS) και Keystore (Android)
Παράμετρος iOS Keychain Android Keystore
Τύπος αποθηκευμένων δεδομένων Κωδικοί, διακριτικά, κλειδιά, πιστοποιητικά Κρυπτογραφικά κλειδιά
Υποστήριξη υλικού Secure Enclave (όλα τα iPhone με A7+) TEE (Android 6+, εξαρτάται από το τσιπ)
Κρυπτογράφηση AES-256 υλικού AES/GCM με κλειδί υλικού
Βιομετρικά Face ID / Touch ID για πρόσβαση BiometricPrompt για πρόσβαση
iCloud / αντίγραφο ασφαλείας Συγχρονισμός μέσω iCloud Keychain Δεν συγχρονίζεται με το cloud
Απόδοση Πιο αργό (κρυπτογράφηση υλικού) Ταχύτερο (TEE)

SharedPreferences και NSUserDefaults δεν έχουν σχεδιαστεί για αποθήκευση ευαίσθητων δεδομένων — αποθηκεύουν πληροφορίες σε απλό κείμενο. Για προστασία δεδομένων, χρησιμοποιήστε EncryptedSharedPreferences (Android) ή κρυπτογραφήστε τα δεδομένα πριν από την αποθήκευση στο UserDefaults (iOS). Στην IT Sectr, χρησιμοποιούμε πάντα Keychain και Keystore για διακριτικά πρόσβασης και κωδικούς.

Ταυτοποίηση: OAuth 2.0, JWT και Βιομετρικά

OAuth 2.0 και OpenID Connect

OAuth 2.0 είναι ένα πρωτόκολλο εξουσιοδοτημένης αντιπροσώπευσης που παρέχει ασφαλή πρόσβαση σε πόρους χρήστη χωρίς μετάδοση κωδικού πρόσβασης. Στις φορητές εφαρμογές, χρησιμοποιείται συχνότερα το Authorization Code Flow με PKCE (Proof Key for Code Exchange). Το PKCE αποτρέπει την υποκλοπή του κωδικού εξουσιοδότησης — μια υποχρεωτική απαίτηση για φορητές εφαρμογές.

OpenID Connect (OIDC) είναι μια επέκταση πάνω από το OAuth 2.0 για ταυτοποίηση χρήστη. Το OIDC προσθέτει ένα ID Token σε μορφή JWT που περιέχει πληροφορίες χρήστη (όνομα, email, id). Η ροή OAuth 2.0 + OIDC περιλαμβάνει: ανακατεύθυνση του χρήστη στη σελίδα σύνδεσης, λήψη κωδικού εξουσιοδότησης, ανταλλαγή του κωδικού για διακριτικά (access + refresh + id), χρήση του διακριτικού πρόσβασης για αιτήματα API.

JWT: Διακριτικά Πρόσβασης, Ανανέωσης και Συνεδρίας

JWT (JSON Web Token) είναι μια συμπαγής, ασφαλής για URL μορφή διακριτικού που περιέχει αξιώσεις σε μορφή JSON. Το JWT αποτελείται από τρία μέρη: κεφαλίδα (τύπος και αλγόριθμος υπογραφής), ωφέλιμο φορτίο (δεδομένα) και υπογραφή. Το Διακριτικό Πρόσβασης είναι ένα βραχύβιο διακριτικό (15–60 λεπτά) για πρόσβαση API. Το Διακριτικό Ανανέωσης είναι ένα μακρόβιο διακριτικό (ημέρες/εβδομάδες) για λήψη νέου διακριτικού πρόσβασης χωρίς επανασύνδεση.

Διακριτικό Συνεδρίας είναι μια παραδοσιακή προσέγγιση όπου ο διακομιστής αποθηκεύει τη συνεδρία σε μια βάση δεδομένων ή Redis και ο πελάτης λαμβάνει ένα τυχαίο αναγνωριστικό. Στη φορητή ανάπτυξη, το JWT προτιμάται: δεν απαιτεί αποθήκευση συνεδρίας από την πλευρά του διακομιστή, περιέχει όλες τις πληροφορίες μέσα του και είναι εύκολο να επαληθευτεί. Ωστόσο, το JWT δεν μπορεί να ανακληθεί άμεσα — αυτός είναι ένας συμβιβασμός που επιλύεται με μικρή διάρκεια ζωής του διακριτικού πρόσβασης και χρήση διακριτικών ανανέωσης.

Βιομετρική Ταυτοποίηση

Face ID και Touch ID στο iOS, Ταυτοποίηση με Αποτύπωμα στο Android — βιομετρικές μέθοδοι ταυτοποίησης που χρησιμοποιούν μοναδικά φυσικά χαρακτηριστικά του χρήστη. Στο iOS, τα βιομετρικά λειτουργούν μέσω LocalAuthentication (LAContext), στο Android — μέσω BiometricPrompt (Android 9+) ή FingerprintManager (ξεπερασμένο). Τα βιομετρικά χρησιμοποιούνται για ξεκλείδωμα εφαρμογής, επιβεβαίωση πληρωμών και πρόσβαση σε προστατευμένα δεδομένα.

Σημαντικές αποχρώσεις: τα βιομετρικά είναι μια βολική εμπειρία χρήστη, αλλά όχι υποκατάστατο της ταυτοποίησης διακομιστή. Μετά από επιτυχή βιομετρική επαλήθευση, η εφαρμογή θα πρέπει να λάβει ένα διακριτικό πρόσβασης από τον διακομιστή. Στο Android, βεβαιωθείτε ότι η συσκευή χρησιμοποιεί βιομετρικά Κλάσης 3 (Ισχυρά), όχι μόνο αναγνώριση προσώπου μέσω κάμερας (Κλάση 1).

Προστασία Κώδικα: ProGuard, R8 και Root Detection

Συσκότιση: ProGuard και R8

ProGuard είναι ένα εργαλείο συσκότισης, συμπίεσης και βελτιστοποίησης bytecode Java για Android, που αυξάνει την ασφάλεια κώδικα έναντι της αντίστροφης μηχανικής. Το R8 είναι ο διάδοχός του, ενσωματωμένο στο Gradle από το Android Studio 3.4. Το R8 εκτελεί τέσσερις εργασίες: συμπίεση (αφαιρεί μη χρησιμοποιούμενες κλάσεις και μεθόδους), βελτιστοποίηση (ενσωματώνει μεθόδους, απλοποιεί κώδικα), συσκότιση (μετονομάζει κλάσεις και μεθόδους σε σύντομα ονόματα) και προ-επαλήθευση (έλεγχος bytecode).

DexGuard είναι μια εμπορική έκδοση του ProGuard με εκτεταμένη προστασία: κρυπτογράφηση συμβολοσειρών, συσκότιση πόρων, προστασία από ανασυσκευασία, έλεγχος ακεραιότητας APK. Για τα περισσότερα έργα, το R8 είναι αρκετό, αλλά για χρηματοοικονομικές και τραπεζικές εφαρμογές, το DexGuard παρέχει ένα επιπλέον επίπεδο ασφάλειας. Το R8 ενεργοποιείται μέσω build.gradle: minifyEnabled = true και proguardFiles.

Ανίχνευση Root και Jailbreak

Root Detection (Android) και Jailbreak Detection (iOS) είναι μηχανισμοί που ελέγχουν αν έχουν αποκτηθεί δικαιώματα υπερχρήστη στη συσκευή. Σε παραβιασμένες συσκευές, είναι δυνατή η ανάγνωση της μνήμης διεργασίας, η υποκλοπή κίνησης και η αντικατάσταση κώδικα. Για έλεγχο στο Android, χρησιμοποιείται η παρουσία του δυαδικού αρχείου SU, δοκιμαστικών κλειδιών υπογραφής και μη τυπικών σημάτων κατασκευής.

RASP (Runtime Application Self-Protection) είναι μια τεχνολογία που προστατεύει την εφαρμογή κατά την εκτέλεση. Το RASP ανιχνεύει απόπειρες εντοπισμού σφαλμάτων, ανασυσκευασίας, έγχυσης κώδικα και τερματίζει την εφαρμογή όταν ανιχνεύονται απειλές. Παραδείγματα λύσεων RASP: Dexter, Guardsquare, Promon. Το RASP λειτουργεί κατά τον χρόνο εκτέλεσης και αντιδρά σε ανωμαλίες — σε αντίθεση με τη στατική συσκότιση, η οποία προστατεύει τον κώδικα πριν από την εκτέλεση.

Αντίστροφη Μηχανική είναι η διαδικασία ανάκτησης του πηγαίου κώδικα από μια μεταγλωττισμένη εφαρμογή. Εργαλεία: JADX (απομεταγλωττιστής APK), Ghidra, IDA Pro, Hopper. Η προστασία από την Αντίστροφη Μηχανική είναι ένας συνδυασμός συσκότισης, κρυπτογράφησης συμβολοσειρών, ελέγχου ακεραιότητας και Root Detection. Δεν υπάρχει πλήρης προστασία — ο στόχος είναι να γίνει η αντίστροφη μηχανική αρκετά δαπανηρή για τον εισβολέα.

Συχνές Ερωτήσεις

Από πού να ξεκινήσω την εκμάθηση φορητής ασφάλειας;

Ξεκινήστε με το OWASP Mobile Top 10 — είναι ένας χάρτης πορείας των πιο κοινών ευπαθειών. Στη συνέχεια, μελετήστε HTTPS και πιστοποιητικά SSL, ρυθμίστε το Certificate Pinning και προχωρήστε στην ασφαλή αποθήκευση μέσω Keychain / Keystore.

Ποια είναι η διαφορά μεταξύ συμμετρικής και ασύμμετρης κρυπτογράφησης;

AES (συμμετρική) — ένα κλειδί για κρυπτογράφηση και αποκρυπτογράφηση, γρήγορο, κατάλληλο για μεγάλους όγκους δεδομένων. RSA (ασύμμετρη) — ένα ζεύγος κλειδιών (δημόσιο και ιδιωτικό), πιο αργό, χρησιμοποιείται για ανταλλαγή του συμμετρικού κλειδιού.

Πρέπει να κρυπτογραφώ όλα τα δεδομένα στην εφαρμογή;

Πρέπει να κρυπτογραφείτε μόνο εμπιστευτικά δεδομένα: κωδικούς πρόσβασης, διακριτικά, προσωπικά δεδομένα χρήστη, πληροφορίες πληρωμών. Οι εικόνες, τα κείμενα και οι ρυθμίσεις διεπαφής δεν απαιτούν κρυπτογράφηση — αυτό θα αυξήσει το μέγεθος και θα επιβραδύνει την εφαρμογή.

Τι είναι το Διακριτικό Ανανέωσης και γιατί χρειάζεται;

Διακριτικό Ανανέωσης είναι ένα μακρόβιο διακριτικό που επιτρέπει τη λήψη νέου Διακριτικού Πρόσβασης χωρίς εκ νέου εισαγωγή του κωδικού πρόσβασης. Αυτό αυξάνει την ασφάλεια — το Διακριτικό Πρόσβασης ζει 15–60 λεπτά και ακόμα κι αν διαρρεύσει, ο εισβολέας δεν μπορεί να το χρησιμοποιήσει για πολύ.

Είναι υποχρεωτική η χρήση ProGuard / R8;

Ναι, το R8 πρέπει να ενεργοποιηθεί για τις εκδόσεις έκδοσης Android. Δεν είναι μόνο προστασία από την Αντίστροφη Μηχανική, αλλά και μείωση μεγέθους APK και βελτιστοποίηση απόδοσης. Χωρίς R8, ο κώδικάς σας μπορεί να απομεταγλωττιστεί σε αναγνώσιμη μορφή με μία μόνο εντολή JADX.

Σύνοψη

  • OWASP Mobile Top 10 — η βασική λίστα απειλών· ξεκινήστε τον έλεγχο ασφάλειας με αυτήν.
  • AES-256 — το πρότυπο συμμετρικής κρυπτογράφησης για δεδομένα στη συσκευή· RSA — για ανταλλαγή κλειδιών.
  • Keychain (iOS) και Keystore (Android) — τα μόνα σωστά μέρη για αποθήκευση διακριτικών και κωδικών πρόσβασης.
  • OAuth 2.0 με PKCE και JWT — το σύγχρονο πρότυπο ταυτοποίησης για φορητές εφαρμογές.
  • R8 — ένα υποχρεωτικό εργαλείο συσκότισης για Android· το Root/Jailbreak Detection προστατεύει από παραβιασμένες συσκευές.
  • Certificate Pinning αποτρέπει επιθέσεις MITM ακόμα κι όταν το πιστοποιητικό αντικαθίσταται.
  • Η ασφάλεια είναι μια διαδικασία, όχι ένα χαρακτηριστικό: δοκιμάστε τις ευπάθειες σε κάθε στάδιο ανάπτυξης.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου