iOS Serialisation and Encoding

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

코드 및 자세한 정보는 https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence에서 확인할 수 있습니다.

iOS 개발에서의 객체 직렬화

iOS에서 객체 직렬화는 객체를 쉽게 저장하거나 전송할 수 있는 형식으로 변환한 다음, 필요할 때 이 형식에서 객체를 재구성하는 과정을 의미합니다. **NSCoding**과 **NSSecureCoding**이라는 두 가지 주요 프로토콜은 Objective-C 또는 NSObject 하위 클래스를 위해 이 프로세스를 용이하게 해주며, 객체를 바이트 버퍼를 감싸는 NSData 형식으로 직렬화할 수 있게 합니다.

NSCoding 구현

NSCoding을 구현하기 위해서는 클래스가 NSObject를 상속하거나 @objc로 표시되어야 합니다. 이 프로토콜은 인스턴스 변수를 인코딩하고 디코딩하기 위해 두 가지 메서드의 구현을 필요로 합니다:

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 프로토콜은 DecodableEncodable을 결합하여 String, Int, Double 등과 같은 객체의 인코딩과 디코딩을 추가 노력 없이 용이하게 처리합니다:

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

이 접근 방식은 Swift 애플리케이션에서 데이터 처리를 향상시키기 위해 속성 목록과 JSON으로의 직렬화를 지원합니다.

JSON 및 XML 인코딩 대안

네이티브 지원 외에도, 여러 제3자 라이브러리가 JSON 및 XML 인코딩/디코딩 기능을 제공하며, 각각의 성능 특성과 보안 고려 사항이 있습니다. 외부 엔티티 처리를 방지하기 위해 파서를 구성하여 XXE (XML External Entities) 공격과 같은 취약점을 완화하는 데 특히 주의해야 합니다.

보안 고려 사항

데이터를 직렬화할 때, 특히 파일 시스템으로, 민감한 정보의 포함 가능성에 대해 주의해야 합니다. 가로채거나 부적절하게 처리된 직렬화된 데이터는 무단 조치나 데이터 유출과 같은 위험에 애플리케이션을 노출시킬 수 있습니다. 직렬화된 데이터의 암호화와 서명을 권장하여 보안을 강화하는 것이 좋습니다.

참고 자료

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

Last updated