iOS Serialisation and Encoding

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Podržite HackTricks

Kod i više informacija na https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence.

Serijalizacija objekata u iOS razvoju

U iOS-u, serijalizacija objekata podrazumeva konvertovanje objekata u format koji se može lako skladištiti ili prenositi, a zatim njihovo rekonstrukciju iz ovog formata kada je to potrebno. Dva glavna protokola, NSCoding i NSSecureCoding, olakšavaju ovaj proces za Objective-C ili NSObject podklase, omogućavajući objektima da budu serijalizovani u NSData, format koji obavija bajt bafer.

NSCoding Implementacija

Da bi se implementirao NSCoding, klasa mora nasleđivati od NSObject ili biti označena kao @objc. Ovaj protokol zahteva implementaciju dva metoda za kodiranje i dekodiranje instancnih varijabli:

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

Povećanje bezbednosti sa NSSecureCoding

Da bi se umanjile ranjivosti gde napadači ubacuju podatke u već konstruisane objekte, NSSecureCoding nudi poboljšani protokol. Klase koje se pridržavaju NSSecureCoding moraju da verifikuju tip objekata tokom dekodiranja, osiguravajući da se instanciraju samo očekivani tipovi objekata. Međutim, važno je napomenuti da, iako NSSecureCoding poboljšava bezbednost tipa, ne enkriptuje podatke niti osigurava njihovu integritet, što zahteva dodatne mere za zaštitu osetljivih informacija:

static var supportsSecureCoding: Bool {
return true
}

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

Data Archiving with NSKeyedArchiver

NSKeyedArchiver i njegov pandan, NSKeyedUnarchiver, omogućavaju kodiranje objekata u datoteku i kasnije njihovo preuzimanje. Ovaj mehanizam je koristan za trajno čuvanje objekata:

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

Korišćenje Codable za pojednostavljenu serializaciju

Swiftov Codable protokol kombinuje Decodable i Encodable, olakšavajući kodiranje i dekodiranje objekata kao što su String, Int, Double, itd., bez dodatnog truda:

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

Ovaj pristup podržava jednostavnu serijalizaciju ka i od property lista i JSON-a, poboljšavajući rukovanje podacima u Swift aplikacijama.

JSON i XML kodiranje alternativama

Pored nativne podrške, nekoliko biblioteka trećih strana nudi mogućnosti kodiranja/dekodiranja JSON-a i XML-a, svaka sa svojim karakteristikama performansi i bezbednosnim razmatranjima. Važno je pažljivo odabrati ove biblioteke, posebno kako bi se umanjile ranjivosti poput XXE (XML spoljašnjih entiteta) napada konfigurisanjem parsera da spreče obradu spoljašnjih entiteta.

Bezbednosna razmatranja

Kada se serijalizuju podaci, posebno u sistem datoteka, važno je biti oprezan u vezi sa potencijalnim uključivanjem osetljivih informacija. Serijalizovani podaci, ako budu presretnuti ili nepravilno obrađeni, mogu izložiti aplikacije rizicima kao što su neovlašćene radnje ili curenje podataka. Preporučuje se enkripcija i potpisivanje serijalizovanih podataka kako bi se poboljšala bezbednost.

Reference

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Last updated