mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-26 13:03:37 +00:00
86 lines
6.2 KiB
Markdown
86 lines
6.2 KiB
Markdown
<details>
|
|
|
|
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras maneiras de apoiar o HackTricks:
|
|
|
|
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
|
|
|
</details>
|
|
|
|
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
|
|
|
|
No iOS, a **serialização de objetos** envolve a conversão de 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 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:
|
|
```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)
|
|
}
|
|
}
|
|
```
|
|
### **Aprimorando a Segurança com `NSSecureCoding`**
|
|
Para mitigar vulnerabilidades onde atacantes injetam dados em objetos já construídos, o **`NSSecureCoding`** oferece um protocolo aprimorado. Classes que se 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 observar que, enquanto o `NSSecureCoding` aprimora a segurança de tipos, ele não criptografa dados ou garante sua integridade, sendo necessárias medidas adicionais para proteger informações sensíveis:
|
|
```swift
|
|
static var supportsSecureCoding: Bool {
|
|
return true
|
|
}
|
|
|
|
let obj = decoder.decodeObject(of: MyClass.self, forKey: "myKey")
|
|
```
|
|
## Arquivamento 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:
|
|
```swift
|
|
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 adicional:
|
|
```swift
|
|
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, aprimorando o manuseio de dados em aplicativos 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 (Entidades Externas XML) 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 manipulados de forma inadequada, podem expor aplicativos 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
|
|
* [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>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras maneiras de apoiar o HackTricks:
|
|
|
|
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|