iOS Serialisation and Encoding
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Code and more information in https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence.
iOS에서 객체 직렬화는 객체를 쉽게 저장하거나 전송할 수 있는 형식으로 변환한 다음, 필요할 때 이 형식에서 다시 재구성하는 과정을 포함합니다. 두 가지 주요 프로토콜인 **NSCoding
**과 **NSSecureCoding
**은 Objective-C 또는 NSObject
서브클래스에 대해 이 과정을 용이하게 하여 객체를 **NSData
**로 직렬화할 수 있게 합니다. 이는 바이트 버퍼를 감싸는 형식입니다.
NSCoding
구현NSCoding
을 구현하려면 클래스가 NSObject
에서 상속받거나 @objc
로 표시되어야 합니다. 이 프로토콜은 인스턴스 변수를 인코딩하고 디코딩하기 위한 두 가지 메서드의 구현을 요구합니다:
NSSecureCoding
로 보안 강화하기공격자가 이미 구성된 객체에 데이터를 주입하는 취약점을 완화하기 위해, **NSSecureCoding
**은 향상된 프로토콜을 제공합니다. NSSecureCoding
에 준수하는 클래스는 디코딩 중 객체의 유형을 확인해야 하며, 예상되는 객체 유형만 인스턴스화되도록 보장합니다. 그러나 NSSecureCoding
이 유형 안전성을 향상시키는 동안 데이터 암호화나 무결성을 보장하지 않으므로, 민감한 정보를 보호하기 위한 추가 조치가 필요합니다:
NSKeyedArchiver
NSKeyedArchiver
와 그 대응인 NSKeyedUnarchiver
는 객체를 파일로 인코딩하고 나중에 이를 검색할 수 있게 해줍니다. 이 메커니즘은 객체를 지속적으로 저장하는 데 유용합니다:
Codable
for Simplified SerializationSwift의 Codable
프로토콜은 Decodable
과 Encodable
을 결합하여 String
, Int
, Double
등과 같은 객체의 인코딩 및 디코딩을 추가적인 노력 없이 용이하게 합니다:
이 접근 방식은 속성 목록 및 JSON으로의 간단한 직렬화를 지원하여 Swift 애플리케이션의 데이터 처리를 향상시킵니다.
네이티브 지원 외에도 여러 서드파티 라이브러리가 JSON 및 XML 인코딩/디코딩 기능을 제공하며, 각 라이브러리는 고유한 성능 특성과 보안 고려 사항을 가지고 있습니다. 이러한 라이브러리를 신중하게 선택하는 것이 중요하며, 특히 외부 엔티티 처리를 방지하기 위해 파서를 구성하여 XXE(XML External Entities) 공격과 같은 취약점을 완화해야 합니다.
데이터를 직렬화할 때, 특히 파일 시스템으로 직렬화할 때는 민감한 정보가 포함될 가능성에 대해 경계를 유지하는 것이 필수적입니다. 직렬화된 데이터는 가로채이거나 부적절하게 처리될 경우 애플리케이션을 무단 작업이나 데이터 유출과 같은 위험에 노출시킬 수 있습니다. 보안을 강화하기 위해 직렬화된 데이터를 암호화하고 서명하는 것이 권장됩니다.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)