6.1 KiB
{% hint style="success" %}
Aprenda e pratique AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para os repositórios do HackTricks e HackTricks Cloud.
Código e mais informações em https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence.
Serialização de Objetos no Desenvolvimento iOS
Em iOS, serialização de objetos envolve converter objetos em um formato que pode ser facilmente armazenado ou transmitido, e depois reconstruí-los a partir desse formato quando necessário. Dois protocolos principais, NSCoding
e NSSecureCoding
, facilitam esse processo para subclasses de Objective-C ou NSObject
, permitindo que objetos sejam serializados em NSData
, um formato que envolve buffers de bytes.
Implementação de NSCoding
Para implementar NSCoding
, uma classe deve herdar de NSObject
ou ser marcada como @objc
. Este protocolo exige a implementação de dois métodos para codificar e decodificar variáveis de instância:
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)
}
}
Aprimorando a Segurança com NSSecureCoding
Para mitigar vulnerabilidades onde atacantes injetam dados em objetos já construídos, NSSecureCoding
oferece um protocolo aprimorado. Classes que conformam com NSSecureCoding
devem verificar o tipo de objetos durante a decodificação, garantindo que apenas os tipos de objetos esperados sejam instanciados. No entanto, é crucial notar que, embora NSSecureCoding
aprimore a segurança de tipo, não criptografa dados nem garante sua integridade, necessitando de medidas adicionais para proteger informações sensíveis:
static var supportsSecureCoding: Bool {
return true
}
let obj = decoder.decodeObject(of: MyClass.self, forKey: "myKey")
Armazenamento de Dados com NSKeyedArchiver
NSKeyedArchiver
e seu contraparte, NSKeyedUnarchiver
, permitem codificar objetos em um arquivo e posteriormente recuperá-los. Esse mecanismo é útil para persistir objetos:
NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive")
let customPoint = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as? CustomPoint
Usando Codable
para Serialização Simplificada
O protocolo Codable
do Swift combina Decodable
e Encodable
, facilitando a codificação e decodificação de objetos como String
, Int
, Double
, etc., sem esforço extra:
struct CustomPointStruct: Codable {
var x: Double
var name: String
}
Esta abordagem suporta a serialização direta para e a partir de listas de propriedades e JSON, melhorando o manuseio de dados em aplicações Swift.
Alternativas de Codificação JSON e XML
Além do suporte nativo, várias bibliotecas de terceiros oferecem capacidades de codificação/decodificação JSON e XML, cada uma com suas próprias características de desempenho e considerações de segurança. É imperativo selecionar cuidadosamente essas bibliotecas, especialmente para mitigar vulnerabilidades como ataques XXE (XML External Entities) configurando os analisadores para evitar o processamento de entidades externas.
Considerações de Segurança
Ao serializar dados, especialmente para o sistema de arquivos, é essencial estar atento à possível inclusão de informações sensíveis. Dados serializados, se interceptados ou manuseados de forma inadequada, podem expor aplicações a riscos como ações não autorizadas ou vazamento de dados. Recomenda-se criptografar e assinar dados serializados para aumentar a segurança.
Referências
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.