hacktricks/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md

6 KiB

{% hint style="success" %} Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)

Ondersteun HackTricks
{% endhint %}

Kode en meer inligting in https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence.

Objekt Serialisering in iOS Ontwikkeling

In iOS, objekt serialisering behels die omskakeling van objekten in 'n formaat wat maklik gestoor of oorgedra kan word, en dan die heropbou daarvan uit hierdie formaat wanneer nodig. Twee hoof protokolle, NSCoding en NSSecureCoding, fasiliteer hierdie proses vir Objective-C of NSObject subklasse, wat objekten toelaat om in NSData geserialiseer te word, 'n formaat wat byte buffers omhul.

NSCoding Implementasie

Om NSCoding te implementeer, moet 'n klas van NSObject erf of gemerk wees as @objc. Hierdie protokol vereis die implementering van twee metodes vir die kodering en dekodering van instansie veranderlikes:

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

Verbetering van Sekuriteit met NSSecureCoding

Om kwesbaarhede te verminder waar aanvallers data in reeds geboude voorwerpe inspuit, bied NSSecureCoding 'n verbeterde protokol. Klasse wat aan NSSecureCoding voldoen, moet die tipe voorwerpe tydens dekodering verifieer, wat verseker dat slegs die verwagte voorwerp tipes geïnstantieer word. Dit is egter belangrik om op te let dat terwyl NSSecureCoding tipe veiligheid verbeter, dit nie data enkripteer of die integriteit daarvan verseker nie, wat addisionele maatreëls vereis om sensitiewe inligting te beskerm:

static var supportsSecureCoding: Bool {
return true
}

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

Data Archiving with NSKeyedArchiver

NSKeyedArchiver en sy teenhanger, NSKeyedUnarchiver, stel in staat om voorwerpe in 'n lêer te kodifiseer en dit later weer te onttrek. Hierdie meganisme is nuttig om voorwerpe te behou:

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

Gebruik van Codable vir Vereenvoudigde Serialisering

Swift se Codable protokol kombineer Decodable en Encodable, wat die kodering en dekodering van voorwerpe soos String, Int, Double, ens., vergemaklik sonder ekstra moeite:

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

Hierdie benadering ondersteun eenvoudige serialisering na en van eiendomslyste en JSON, wat datahantering in Swift-toepassings verbeter.

JSON en XML Kodering Alternatiewe

Benewens inheemse ondersteuning, bied verskeie derdeparty-biblioteke JSON en XML kodering/dekodering vermoëns, elk met sy eie prestasiekenmerke en sekuriteits oorwegings. Dit is noodsaaklik om hierdie biblioteke versigtig te kies, veral om kwesbaarhede soos XXE (XML External Entities) aanvalle te verminder deur parsers te konfigureer om eksterne entiteitverwerking te voorkom.

Sekuriteits Oorwegings

Wanneer data geserialiseer word, veral na die lêerstelsel, is dit noodsaaklik om waaksaam te wees oor die potensiële insluiting van sensitiewe inligting. Geserialiseerde data, indien onderskep of verkeerd hanteer, kan toepassings blootstel aan risiko's soos ongeoorloofde aksies of datalek. Dit word aanbeveel om geënkripteerde en ondertekende geserialiseerde data te gebruik om sekuriteit te verbeter.

Verwysings

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}