hacktricks/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md
2024-02-11 01:46:25 +00:00

86 lines
6.2 KiB
Markdown

<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
Kod i więcej informacji na stronie [https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence](https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence).
## Serializacja obiektów w rozwoju iOS
W iOS, **serializacja obiektów** polega na konwertowaniu obiektów na format, który można łatwo przechowywać lub przesyłać, a następnie odtwarzaniu ich z tego formatu, gdy są potrzebne. Dwa główne protokoły, **`NSCoding`** i **`NSSecureCoding`**, ułatwiają ten proces dla klas Objective-C lub `NSObject`, pozwalając na serializację obiektów do formatu **`NSData`**, który zawiera bufor bajtów.
### Implementacja **`NSCoding`**
Aby zaimplementować `NSCoding`, klasa musi dziedziczyć po `NSObject` lub być oznaczona jako `@objc`. Ten protokół wymaga implementacji dwóch metod do kodowania i dekodowania zmiennych instancji:
```swift
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)
}
}
```
### **Wzmacnianie bezpieczeństwa za pomocą `NSSecureCoding`**
Aby złagodzić podatności, w których atakujący wstrzykują dane do już skonstruowanych obiektów, **`NSSecureCoding`** oferuje ulepszony protokół. Klasy zgodne z `NSSecureCoding` muszą zweryfikować typ obiektów podczas dekodowania, zapewniając, że są tworzone tylko oczekiwane typy obiektów. Jednak ważne jest zauważenie, że chociaż `NSSecureCoding` zwiększa bezpieczeństwo typów, nie szyfruje danych ani nie zapewnia ich integralności, co wymaga dodatkowych środków ochrony poufnych informacji:
```swift
static var supportsSecureCoding: Bool {
return true
}
let obj = decoder.decodeObject(of: MyClass.self, forKey: "myKey")
```
## Archiwizacja danych za pomocą `NSKeyedArchiver`
`NSKeyedArchiver` i jego odpowiednik, `NSKeyedUnarchiver`, umożliwiają kodowanie obiektów do pliku i późniejsze ich odtworzenie. Mechanizm ten jest przydatny do trwałego przechowywania obiektów:
```swift
NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive")
let customPoint = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as? CustomPoint
```
### Używanie `Codable` do uproszczonej serializacji
Protokół `Codable` w języku Swift łączy `Decodable` i `Encodable`, ułatwiając kodowanie i dekodowanie obiektów takich jak `String`, `Int`, `Double`, itp., bez dodatkowego wysiłku:
```swift
struct CustomPointStruct: Codable {
var x: Double
var name: String
}
```
To podejście obsługuje proste serializowanie do i z listy właściwości oraz JSON, poprawiając obsługę danych w aplikacjach Swift.
## Alternatywy dla kodowania JSON i XML
Oprócz natywnej obsługi, istnieje kilka bibliotek innych firm, które oferują możliwość kodowania/odkodowywania JSON i XML, z różnymi charakterystykami wydajnościowymi i uwzględniającymi bezpieczeństwo. Ważne jest dokładne wybieranie tych bibliotek, zwłaszcza w celu zminimalizowania podatności na ataki XXE (XML External Entities) poprzez konfigurację parserów w celu zapobiegania przetwarzaniu zewnętrznych jednostek.
### Uwagi dotyczące bezpieczeństwa
Podczas serializowania danych, zwłaszcza do systemu plików, ważne jest zachowanie czujności wobec potencjalnego uwzględnienia poufnych informacji. Serializowane dane, jeśli zostaną przechwycone lub nieprawidłowo obsłużone, mogą narazić aplikacje na ryzyko takie jak nieautoryzowane działania lub wyciek danych. Zaleca się szyfrowanie i podpisywanie serializowanych danych w celu poprawy bezpieczeństwa.
## Odwołania
* [https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence](https://mas.owasp.org/MASTG/iOS/0x06h-Testing-Platform-Interaction/#object-persistence)
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>