iOS Serialisation and Encoding

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Κώδικας και περισσότερες πληροφορίες στο https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence.

Αντικειμενική Σειριοποίηση στην Ανάπτυξη iOS

Στο iOS, η αντικειμενική σειριοποίηση περιλαμβάνει τη μετατροπή αντικειμένων σε ένα μορφότυπο που μπορεί να αποθηκευτεί ή να μεταδοθεί εύκολα, και στη συνέχεια την ανακατασκευή τους από αυτόν τον μορφότυπο όταν απαιτείται. Δύο κύρια πρωτόκολλα, το NSCoding και το NSSecureCoding, διευκολύνουν αυτήν τη διαδικασία για τις υποκλάσεις Objective-C ή NSObject, επιτρέποντας την σειριοποίηση των αντικειμένων σε μορφή NSData, ένα μορφότυπο που εγκλείει δυαδικά buffers.

Υλοποίηση NSCoding

Για να υλοποιηθεί το NSCoding, μια κλάση πρέπει να κληρονομεί από το NSObject ή να επισημαίνεται ως @objc. Αυτό το πρωτόκολλο απαιτεί την υλοποίηση δύο μεθόδων για την κωδικοποίηση και αποκωδικοποίηση μεταβλητών της περίπτωσης:

class CustomPoint: NSObject, NSCoding {
var x: Double = 0.0
var name: String = ""

func encode(with aCoder: NSCoder) {
aCoder.encode(x, forKey: "x")
aCoder.encode(name, forKey: "name")
}

required convenience init?(coder aDecoder: NSCoder) {
guard let name = aDecoder.decodeObject(forKey: "name") as? String else { return nil }
self.init(x: aDecoder.decodeDouble(forKey: "x"), name: name)
}
}

Ενισχύοντας την ασφάλεια με το NSSecureCoding

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

static var supportsSecureCoding: Bool {
return true
}

let obj = decoder.decodeObject(of: MyClass.self, forKey: "myKey")

Αρχειοθέτηση Δεδομένων με το NSKeyedArchiver

Το NSKeyedArchiver και ο αντίστοιχος του, NSKeyedUnarchiver, επιτρέπουν την κωδικοποίηση αντικειμένων σε ένα αρχείο και την αργότερη ανάκτησή τους. Αυτός ο μηχανισμός είναι χρήσιμος για την διατήρηση αντικειμένων:

NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive")
let customPoint = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as? CustomPoint

Χρήση του Codable για Απλοποιημένη Σειριοποίηση

Το πρωτόκολλο Codable της Swift συνδυάζει τα πρωτόκολλα Decodable και Encodable, διευκολύνοντας την κωδικοποίηση και αποκωδικοποίηση αντικειμένων όπως String, Int, Double, κ.λπ., χωρίς περιττή προσπάθεια:

struct CustomPointStruct: Codable {
var x: Double
var name: String
}

Αυτή η προσέγγιση υποστηρίζει απλή σειριοποίηση προς και από λίστες ιδιοτήτων και JSON, βελτιώνοντας την χειρισμό δεδομένων σε εφαρμογές Swift.

Εναλλακτικές κωδικοποίησης JSON και XML

Πέρα από την ενσωματωμένη υποστήριξη, υπάρχουν αρκετές βιβλιοθήκες τρίτων που προσφέρουν δυνατότητες κωδικοποίησης/αποκωδικοποίησης JSON και XML, με κάθε μία να έχει τα δικά της χαρακτηριστικά απόδοσης και ασφάλειας. Είναι απαραίτητο να επιλέξετε προσεκτικά αυτές τις βιβλιοθήκες, ιδιαίτερα για να αντιμετωπίσετε ευπάθειες όπως οι επιθέσεις XXE (XML External Entities) με τη ρύθμιση των αναλυτών για την αποτροπή της επεξεργασίας εξωτερικών οντοτήτων.

Ασφαλείς σκέψεις

Όταν γίνεται σειριοποίηση δεδομένων, ιδιαίτερα προς το σύστημα αρχείων, είναι απαραίτητο να είστε προσεκτικοί για την πιθανή περιλαμβανόμενη ευαίσθητη πληροφορία. Τα σειριοποιημένα δεδομένα, αν παρακολουθηθούν ή χειριστούν εσφαλμένα, μπορούν να αποκαλύψουν τις εφαρμογές σε κινδύνους όπως μη εξουσιοδοτημένες ενέργειες ή διαρροή δεδομένων. Συνιστάται η κρυπτογράφηση και η υπογραφή των σειριοποιημένων δεδομένων για την ενίσχυση της ασφάλειας.

Αναφορές

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated