iOS Serialisation and Encoding

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Code und weitere Informationen unter https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence.

Objektserialisierung in der iOS-Entwicklung

In iOS beinhaltet die Objektserialisierung das Konvertieren von Objekten in ein Format, das leicht gespeichert oder übertragen werden kann, und das anschließende Wiederherstellen dieser Objekte aus diesem Format bei Bedarf. Zwei Hauptprotokolle, NSCoding und NSSecureCoding, erleichtern diesen Prozess für Objective-C- oder NSObject-Unterklassen, indem sie Objekte in das Format NSData serialisieren, ein Format, das Byte-Puffer umschließt.

Implementierung von NSCoding

Um NSCoding zu implementieren, muss eine Klasse von NSObject erben oder als @objc markiert sein. Dieses Protokoll schreibt die Implementierung von zwei Methoden zur Codierung und Decodierung von Instanzvariablen vor:

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)
}
}

Verbesserung der Sicherheit mit NSSecureCoding

Um Schwachstellen zu mindern, bei denen Angreifer Daten in bereits konstruierte Objekte einschleusen, bietet NSSecureCoding ein verbessertes Protokoll. Klassen, die NSSecureCoding entsprechen, müssen den Typ der Objekte während der Dekodierung überprüfen, um sicherzustellen, dass nur die erwarteten Objekttypen instanziiert werden. Es ist jedoch wichtig zu beachten, dass NSSecureCoding zwar die Typensicherheit verbessert, aber keine Daten verschlüsselt oder deren Integrität gewährleistet. Daher sind zusätzliche Maßnahmen zum Schutz sensibler Informationen erforderlich:

static var supportsSecureCoding: Bool {
return true
}

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

Datenarchivierung mit NSKeyedArchiver

NSKeyedArchiver und sein Gegenstück NSKeyedUnarchiver ermöglichen das Codieren von Objekten in eine Datei und späteres Abrufen dieser Objekte. Dieser Mechanismus ist nützlich für die Persistenz von Objekten:

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

Verwendung von Codable für vereinfachte Serialisierung

Das Codable-Protokoll von Swift kombiniert Decodable und Encodable und erleichtert die Codierung und Decodierung von Objekten wie String, Int, Double, usw., ohne zusätzlichen Aufwand:

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

Diese Methode unterstützt eine einfache Serialisierung von und zu Property-Listen und JSON und verbessert die Datenverarbeitung in Swift-Anwendungen.

JSON- und XML-Codierungsalternativen

Neben der nativen Unterstützung bieten mehrere Drittanbieterbibliotheken Codierung/Decodierung von JSON und XML an, wobei jede ihre eigenen Leistungsmerkmale und Sicherheitsaspekte hat. Es ist wichtig, diese Bibliotheken sorgfältig auszuwählen, insbesondere um Sicherheitslücken wie XXE (XML External Entities)-Angriffe zu vermeiden, indem Parser so konfiguriert werden, dass die Verarbeitung externer Entitäten verhindert wird.

Sicherheitsaspekte

Beim Serialisieren von Daten, insbesondere auf das Dateisystem, ist es wichtig, wachsam zu sein, um das potenzielle Einfügen sensibler Informationen zu vermeiden. Serialisierte Daten können, wenn sie abgefangen oder unsachgemäß behandelt werden, Anwendungen Risiken wie unbefugte Aktionen oder Datenlecks aussetzen. Es wird empfohlen, serialisierte Daten zu verschlüsseln und zu signieren, um die Sicherheit zu verbessern.

Referenzen

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated