hacktricks/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md
2024-02-10 13:11:20 +00:00

6.1 KiB

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

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 pretvaranje objekata u format koji se može lako skladištiti ili preneti, a zatim njihovo rekonstruisanje iz ovog formata kada je 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 obuhvata bajtne bafera.

Implementacija NSCoding

Da biste implementirali NSCoding, klasa mora naslediti od NSObject ili biti označena kao @objc. Ovaj protokol zahteva implementaciju dve metode za kodiranje i dekodiranje instancnih promenljivih:

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

Poboljšanje sigurnosti pomoću NSSecureCoding

Da bi se umanjile ranjivosti u kojima napadači ubacuju podatke u već konstruisane objekte, NSSecureCoding nudi unapređeni protokol. Klase koje se pridržavaju NSSecureCoding moraju verifikovati 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 sigurnost tipova, ne šifruje podatke niti osigurava njihovu celovitost, što zahteva dodatne mere za zaštitu osetljivih informacija:

static var supportsSecureCoding: Bool {
return true
}

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

Arhiviranje podataka pomoću NSKeyedArchiver

NSKeyedArchiver i njegov pandan, NSKeyedUnarchiver, omogućavaju enkodiranje objekata u datoteku i kasnije njihovo vraćanje. 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 serijalizaciju

Protokol Codable u Swift-u kombinuje Decodable i Encodable, olakšavajući kodiranje i dekodiranje objekata poput String, Int, Double, itd., bez dodatnog napora:

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

Ovaj pristup podržava jednostavnu serijalizaciju u i iz lista svojstava i JSON-a, poboljšavajući obradu podataka u Swift aplikacijama.

Alternative za enkodiranje JSON-a i XML-a

Pored podrške ugrađene u jezik, postoji nekoliko biblioteka trećih strana koje nude mogućnosti enkodiranja/dekodiranja JSON-a i XML-a, pri čemu svaka ima svoje karakteristike performansi i sigurnosne razmatranja. Važno je pažljivo odabrati ove biblioteke, posebno kako bi se umanjile ranjivosti poput XXE (XML External Entities) napada konfiguracijom parsera radi sprečavanja obrade spoljnih entiteta.

Sigurnosna razmatranja

Prilikom serijalizacije podataka, posebno na datotečni sistem, važno je biti oprezan u vezi potencijalnog uključivanja osetljivih informacija. Serijalizovani podaci, ako se presretnu ili nepravilno rukuju, mogu izložiti aplikacije rizicima poput neovlašćenih radnji ili curenja podataka. Preporučuje se šifrovanje i potpisivanje serijalizovanih podataka radi poboljšanja sigurnosti.

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u: