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

88 lines
6.4 KiB
Markdown
Raw Normal View History

{% 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 %}
2022-04-28 16:01:33 +00:00
Code et plus d'informations sur [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
## Sérialisation d'objets dans le développement iOS
2021-05-21 16:38:18 +00:00
Dans iOS, **la sérialisation d'objets** implique de convertir des objets en un format qui peut être facilement stocké ou transmis, puis de les reconstruire à partir de ce format lorsque nécessaire. Deux protocoles principaux, **`NSCoding`** et **`NSSecureCoding`**, facilitent ce processus pour les sous-classes Objective-C ou `NSObject`, permettant aux objets d'être sérialisés en **`NSData`**, un format qui enveloppe des tampons d'octets.
2021-05-21 16:38:18 +00:00
### **`NSCoding`** Implementation
Pour implémenter `NSCoding`, une classe doit hériter de `NSObject` ou être marquée comme `@objc`. Ce protocole impose l'implémentation de deux méthodes pour l'encodage et le décodage des variables d'instance :
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
}
```
### **Améliorer la sécurité avec `NSSecureCoding`**
Pour atténuer les vulnérabilités où des attaquants injectent des données dans des objets déjà construits, **`NSSecureCoding`** offre un protocole amélioré. Les classes conformes à `NSSecureCoding` doivent vérifier le type des objets lors du décodage, garantissant que seuls les types d'objets attendus sont instanciés. Cependant, il est crucial de noter que bien que `NSSecureCoding` améliore la sécurité des types, il ne crypte pas les données ni n'assure leur intégrité, nécessitant des mesures supplémentaires pour protéger les informations sensibles :
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
```
## Archivage de données avec `NSKeyedArchiver`
`NSKeyedArchiver` et son homologue, `NSKeyedUnarchiver`, permettent d'encoder des objets dans un fichier et de les récupérer ultérieurement. Ce mécanisme est utile pour la persistance des objets :
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
```
### Utilisation de `Codable` pour une sérialisation simplifiée
Le protocole `Codable` de Swift combine `Decodable` et `Encodable`, facilitant l'encodage et le décodage d'objets comme `String`, `Int`, `Double`, etc., sans effort supplémentaire :
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
}
```
Cette approche prend en charge la sérialisation simple vers et depuis des listes de propriétés et JSON, améliorant ainsi la gestion des données dans les applications Swift.
2021-05-21 16:38:18 +00:00
## Alternatives d'encodage JSON et XML
Au-delà du support natif, plusieurs bibliothèques tierces offrent des capacités d'encodage/décodage JSON et XML, chacune ayant ses propres caractéristiques de performance et considérations de sécurité. Il est impératif de sélectionner ces bibliothèques avec soin, en particulier pour atténuer les vulnérabilités telles que les attaques XXE (XML External Entities) en configurant les analyseurs pour empêcher le traitement des entités externes.
2021-05-21 16:38:18 +00:00
### Considérations de sécurité
Lors de la sérialisation des données, en particulier vers le système de fichiers, il est essentiel de rester vigilant quant à l'inclusion potentielle d'informations sensibles. Les données sérialisées, si elles sont interceptées ou mal gérées, peuvent exposer les applications à des risques tels que des actions non autorisées ou des fuites de données. Il est recommandé de chiffrer et de signer les données sérialisées pour améliorer la sécurité.
2021-05-21 16:38:18 +00:00
2023-06-03 13:10:46 +00:00
## Références
* [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 %}