hacktricks/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md
2024-02-10 18:14:16 +00:00

6.3 KiB
Raw Blame History

AWS hackleme becerilerini sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'ı desteklemenin diğer yolları:

Kod ve daha fazla bilgi için https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence.

iOS Geliştirmede Nesne Serileştirme

iOS'te, nesne serileştirme, nesnelerin kolayca depolanabilir veya iletilir bir formata dönüştürülmesini ve ihtiyaç duyulduğunda bu formattan yeniden oluşturulmasını içerir. İki ana protokol, NSCoding ve NSSecureCoding, Objective-C veya NSObject alt sınıfları için bu süreci kolaylaştırır ve nesnelerin, byte tamponlarını saran bir formata olan NSData'ya serileştirilmesine olanak tanır.

NSCoding Uygulaması

NSCoding'i uygulamak için bir sınıfın NSObject'den türetilmesi veya @objc olarak işaretlenmesi gerekir. Bu protokol, örnek değişkenlerin kodlanması ve kod çözme için iki yöntemin uygulanmasını zorunlu kılar:

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

NSSecureCoding ile Güvenliği Artırma

Saldırganların veri enjekte ettiği zafiyetleri azaltmak için NSSecureCoding, gelişmiş bir protokol sunar. NSSecureCoding'i uygulayan sınıflar, çözme işlemi sırasında nesnelerin türünü doğrulamalı ve yalnızca beklenen nesne türlerinin oluşturulmasını sağlamalıdır. Bununla birlikte, NSSecureCoding tür güvenliğini artırırken veriyi şifrelemez veya bütünlüğünü sağlamaz, bu nedenle hassas bilgileri korumak için ek önlemler gereklidir:

static var supportsSecureCoding: Bool {
return true
}

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

NSKeyedArchiver ile Veri Arşivleme

NSKeyedArchiver ve karşılığı olan NSKeyedUnarchiver, nesneleri bir dosyaya kodlamayı ve daha sonra onları geri almayı sağlar. Bu mekanizma nesnelerin kalıcı hale getirilmesi için kullanışlıdır:

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

Basitleştirilmiş Serileştirme için Codable Kullanımı

Swift'in Codable protokolü, Decodable ve Encodable'ı birleştirerek String, Int, Double gibi nesnelerin kodlanması ve kod çözülmesini ekstra çaba gerektirmeden kolaylaştırır:

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

Bu yaklaşım, Swift uygulamalarında veri işleme yeteneklerini artırarak, özellik listelerine ve JSON'a doğrudan seri hale getirme ve seri halden geri alma işlemlerini destekler.

JSON ve XML Kodlama Alternatifleri

Yerel desteğin ötesinde, birkaç üçüncü taraf kütüphane JSON ve XML kodlama/çözme yetenekleri sunar. Her birinin performans özellikleri ve güvenlik hususları vardır. Özellikle dış varlık işleme önlemek için ayrıştırıcıları yapılandırarak XXE (XML Dış Varlıklar) saldırıları gibi zafiyetleri azaltmak için bu kütüphaneleri dikkatlice seçmek önemlidir.

Güvenlik Hususları

Verileri seri hale getirirken, özellikle dosya sistemine, hassas bilgilerin potansiyel olarak dahil edilmesine dikkat etmek önemlidir. Yakalanması veya yanlış şekilde işlenmesi durumunda seri hale getirilmiş veriler, yetkisiz eylemlere veya veri sızıntısına gibi risklere maruz kalabilir. Seri hale getirilmiş verilerin şifrelenmesi ve imzalanması, güvenliği artırmak için önerilir.

Referanslar

AWS hacklemeyi sıfırdan kahraman olmak için htARTE (HackTricks AWS Red Team Expert)'ı öğrenin!

HackTricks'i desteklemenin diğer yolları: