iOS Serialisation and Encoding

ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricks をサポートする他の方法:

コードと詳細情報はhttps://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistenceで確認できます。

iOS開発におけるオブジェクトシリアライゼーション

iOSにおいて、オブジェクトのシリアライゼーションは、オブジェクトを簡単に保存または送信できる形式に変換し、必要に応じてこの形式から再構築することを指します。NSCodingNSSecureCoding という2つの主要なプロトコルが、Objective-Cまたは NSObject のサブクラスに対して、オブジェクトを NSData にシリアライズするプロセスを容易にします。

NSCoding の実装

NSCoding を実装するには、クラスは NSObject を継承するか @objc とマークされている必要があります。このプロトコルは、エンコードとデコードのための2つのメソッドの実装を要求します。

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を使用したセキュリティの強化

攻撃者がすでに構築されたオブジェクトにデータを注入する脆弱性を緩和するために、**NSSecureCoding**は強化されたプロトコルを提供します。NSSecureCodingに準拠するクラスは、デコード中にオブジェクトのタイプを検証する必要があり、想定されているオブジェクトタイプのみがインスタンス化されることを保証します。ただし、NSSecureCodingはタイプの安全性を向上させる一方で、データを暗号化したり整合性を確保したりしないことに注意することが重要です。したがって、機密情報を保護するために追加の対策が必要です。

static var supportsSecureCoding: Bool {
return true
}

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

NSKeyedArchiverを使用したデータアーカイブ

NSKeyedArchiverとその対応物であるNSKeyedUnarchiverは、オブジェクトをファイルにエンコードして後で取得する機能を可能にします。このメカニズムはオブジェクトを永続化するのに役立ちます。

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

Codableを使用したシンプルなシリアル化

SwiftのCodableプロトコルは、StringIntDoubleなどのオブジェクトのエンコーディングとデコーディングを容易にするDecodableEncodableを組み合わせたものです。

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

このアプローチは、プロパティリストやJSONへの直感的なシリアル化をサポートし、Swiftアプリケーションでのデータ処理を向上させます。

JSONおよびXMLエンコーディングの代替手段

ネイティブサポートに加えて、いくつかのサードパーティライブラリがJSONおよびXMLのエンコーディング/デコーディング機能を提供しており、それぞれ独自のパフォーマンス特性とセキュリティ上の考慮事項があります。特に外部エンティティ処理を防止するためにパーサを構成してXXE(XML External Entities)攻撃などの脆弱性を緩和するために、これらのライブラリを注意して選択することが重要です。

セキュリティ上の考慮事項

データをシリアル化する際、特にファイルシステムには、機密情報が含まれる可能性について警戒することが重要です。インターセプトされたり適切に処理されなかったりした場合、シリアル化されたデータは、アプリケーションが不正なアクションやデータ漏洩などのリスクにさらされる可能性があります。シリアル化されたデータの暗号化と署名がセキュリティを向上させるために推奨されています。

参考文献

ゼロからヒーローまでのAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricksをサポートする他の方法:

Last updated