tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
Code and more information in https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence.
iOS開発におけるオブジェクトシリアル化
iOSにおいて、オブジェクトシリアル化は、オブジェクトを簡単に保存または送信できる形式に変換し、必要に応じてこの形式から再構築することを含みます。主に2つのプロトコル、**NSCoding
とNSSecureCoding
が、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")
Data Archiving with NSKeyedArchiver
NSKeyedArchiver
とその対となる NSKeyedUnarchiver
は、オブジェクトをファイルにエンコードし、後でそれらを取得することを可能にします。このメカニズムは、オブジェクトを永続化するのに役立ちます:
NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive")
let customPoint = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as? CustomPoint
Codable
を使用した簡略化されたシリアル化
SwiftのCodable
プロトコルはDecodable
とEncodable
を組み合わせており、String
、Int
、Double
などのオブジェクトのエンコードとデコードを追加の手間なしに容易にします:
struct CustomPointStruct: Codable {
var x: Double
var name: String
}
このアプローチは、プロパティリストとJSONへのシンプルなシリアル化をサポートし、Swiftアプリケーションにおけるデータ処理を強化します。
JSONとXMLエンコーディングの代替
ネイティブサポートを超えて、いくつかのサードパーティライブラリがJSONおよびXMLのエンコーディング/デコーディング機能を提供しており、それぞれに独自のパフォーマンス特性とセキュリティ上の考慮事項があります。特に、外部エンティティ処理を防ぐためにパーサーを構成することで、XXE(XML外部エンティティ)攻撃のような脆弱性を軽減するために、これらのライブラリを慎重に選択することが重要です。
セキュリティ上の考慮事項
データをシリアル化する際、特にファイルシステムに対しては、機密情報が含まれる可能性に注意を払うことが重要です。シリアル化されたデータは、傍受されたり不適切に処理されたりすると、アプリケーションを不正な操作やデータ漏洩といったリスクにさらす可能性があります。セキュリティを強化するために、シリアル化されたデータの暗号化と署名を推奨します。
参考文献
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。