hacktricks/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md
2024-02-11 02:07:06 +00:00

6.1 KiB

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

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

Objekserialisering in iOS-ontwikkeling

In iOS behels objekserialisering die omskakeling van objekte na 'n formaat wat maklik gestoor of oorgedra kan word, en dan die herkonstruksie daarvan uit hierdie formaat wanneer dit nodig is. Twee hoofprotokolle, NSCoding en NSSecureCoding, fasiliteer hierdie proses vir Objective-C of NSObject subklasse, wat objekte kan serialiseer na NSData, 'n formaat wat bytebuffers omhul.

NSCoding-implementering

Om NSCoding te implementeer, moet 'n klas van NSObject erf of gemerk word as @objc. Hierdie protokol vereis die implementering van twee metodes vir die enkodeer en dekodeer van instansie-variables:

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 veiligheid met NSSecureCoding

Om kwetsbaarheden te verminder waar aanvallers data in reeds geconstrueerde objekte inspuit, bied NSSecureCoding 'n verbeterde protokol. Klasse wat voldoen aan NSSecureCoding moet die tipe van objekte verifieer tydens dekodering, om te verseker dat slegs die verwagte objek tipes geïnstantieer word. Dit is egter belangrik om op te let dat terwyl NSSecureCoding tipe veiligheid verbeter, dit nie data enkripsie of die versekering van integriteit verseker nie, en dus addisionele maatreëls nodig is om sensitiewe inligting te beskerm:

static var supportsSecureCoding: Bool {
return true
}

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

Data-argivering met NSKeyedArchiver

NSKeyedArchiver en sy eweknie, NSKeyedUnarchiver, maak dit moontlik om voorwerpe in 'n lêer te enkodeer en later te herwin. Hierdie meganisme is nuttig vir die volharding van voorwerpe:

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 enkodering en dekodering van voorwerpe soos String, Int, Double, ens., sonder ekstra moeite fasiliteer:

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

Hierdie benadering ondersteun reguit serialisering na en vanaf eiendomlyste en JSON, wat datahantering in Swift-toepassings verbeter.

JSON en XML-koderingsalternatiewe

Afgesien van ingeboude ondersteuning, bied verskeie derdeparty biblioteke JSON- en XML-kodering/ontkodering, elk met sy eie prestasiekenmerke en veiligheidsoorwegings. Dit is noodsaaklik om hierdie biblioteke sorgvuldig te kies, veral om kwesbaarhede soos XXE (XML External Entities) aanvalle te verminder deur ontleders te konfigureer om eksterne entiteitsverwerking te voorkom.

Veiligheidsoorwegings

Wanneer data geserialiseer word, veral na die lêersisteem, is dit noodsaaklik om waaksaam te wees oor die moontlike insluiting van sensitiewe inligting. Geserialiseerde data, as dit onderskep of verkeerd hanteer word, kan toepassings blootstel aan risiko's soos ongemagtigde aksies of datalekke. Dit word aanbeveel om geserialiseerde data te versleutel en te onderteken om die veiligheid te verbeter.

Verwysings

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: