hacktricks/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md

88 lines
6.1 KiB
Markdown
Raw Normal View History

{% hint style="success" %}
Aprenda e pratique AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprenda e pratique GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
<summary>Support HackTricks</summary>
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
</details>
{% endhint %}
Código e mais informações em [https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence](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 então 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:
2021-05-21 16:38:18 +00:00
```swift
class CustomPoint: NSObject, NSCoding {
var x: Double = 0.0
var name: String = ""
2021-05-21 16:38:18 +00:00
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)
}
2021-05-21 16:38:18 +00:00
}
```
### **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:
2021-05-21 16:38:18 +00:00
```swift
static var supportsSecureCoding: Bool {
return true
2021-05-21 16:38:18 +00:00
}
let obj = decoder.decodeObject(of: MyClass.self, forKey: "myKey")
2021-05-21 16:38:18 +00:00
```
## 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:
2021-05-21 16:38:18 +00:00
```swift
NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive")
let customPoint = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as? CustomPoint
2021-05-21 16:38:18 +00:00
```
### 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:
2021-05-21 16:38:18 +00:00
```swift
struct CustomPointStruct: Codable {
var x: Double
var name: String
2021-05-21 16:38:18 +00:00
}
```
Esta abordagem suporta a serialização direta de e para listas de propriedades e JSON, melhorando o manuseio de dados em aplicações Swift.
2021-05-21 16:38:18 +00:00
## 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.
2021-05-21 16:38:18 +00:00
### 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.
2021-05-21 16:38:18 +00:00
2023-06-06 18:56:34 +00:00
## Referências
* [https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence](https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence)
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}