Translated ['macos-hardening/macos-security-and-privilege-escalation/mac

This commit is contained in:
Translator 2023-10-09 11:51:23 +00:00
parent 4f18455f11
commit cf5100e22f
4 changed files with 91 additions and 92 deletions

View file

@ -34,7 +34,7 @@ objdump --disassemble-symbols=_hello --x86-asm-syntax=intel toolsdemo #Disassemb
### jtool2
La herramienta se puede utilizar como un **reemplazo** para **codesign**, **otool** y **objdump**, y proporciona algunas características adicionales. [**Descárgala aquí**](http://www.newosxbook.com/tools/jtool.html) o instálala con `brew`.
Esta herramienta se puede utilizar como un **reemplazo** para **codesign**, **otool** y **objdump**, y ofrece algunas características adicionales. [**Descárgala aquí**](http://www.newosxbook.com/tools/jtool.html) o instálala con `brew`.
```bash
# Install
brew install --cask jtool2
@ -51,17 +51,11 @@ ARCH=x86_64 jtool2 --sig /System/Applications/Automator.app/Contents/MacOS/Autom
# Get MIG information
jtool2 -d __DATA.__const myipc_server | grep MIG
```
### Firma de código
### Codesign / ldid
La firma de código es un proceso utilizado en macOS para verificar la autenticidad e integridad de una aplicación. Cada aplicación en macOS debe estar firmada con un certificado válido para garantizar que no ha sido alterada o comprometida. La firma de código utiliza criptografía asimétrica para generar una firma digital única que se adjunta a la aplicación.
La firma de código se puede verificar utilizando la herramienta `codesign` en la línea de comandos. Esta herramienta permite inspeccionar y verificar la firma de una aplicación, así como también identificar cualquier problema de seguridad o manipulación.
Al inspeccionar una aplicación con `codesign`, se pueden obtener detalles sobre el certificado utilizado para firmarla, la identidad del desarrollador y cualquier recurso o biblioteca externa que la aplicación pueda utilizar.
La verificación de la firma de código es una medida importante para garantizar la seguridad de las aplicaciones en macOS. Al verificar la firma de una aplicación, se puede detectar si ha sido modificada o si proviene de una fuente no confiable. Esto ayuda a prevenir la ejecución de aplicaciones maliciosas o comprometidas que podrían comprometer la seguridad del sistema.
En resumen, la firma de código es un proceso esencial para garantizar la autenticidad e integridad de las aplicaciones en macOS. La herramienta `codesign` permite inspeccionar y verificar la firma de una aplicación, lo que ayuda a identificar cualquier problema de seguridad o manipulación.
{% hint style="danger" %}
**`Codesign`** se encuentra en **macOS** mientras que **`ldid`** se encuentra en **iOS**
{% endhint %}
```bash
# Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"
@ -77,6 +71,16 @@ spctl --assess --verbose /Applications/Safari.app
# Sign a binary
codesign -s <cert-name-keychain> toolsdemo
# Get signature info
ldid -h <binary>
# Get entitlements
ldid -e <binary>
# Change entilements
## /tmp/entl.xml is a XML file with the new entitlements to add
ldid -S/tmp/entl.xml <binary>
```
### SuspiciousPackage
@ -127,7 +131,7 @@ Los parámetros que esta función espera son:
| **4to argumento** | **rcx** | **2do argumento para el método** |
| **5to argumento** | **r8** | **3er argumento para el método** |
| **6to argumento** | **r9** | **4to argumento para el método** |
| **7mo+ argumento**| <p><strong>rsp+</strong><br><strong>(en la pila)</strong></p> | **5to+ argumento para el método** |
| **7mo+ argumento** | <p><strong>rsp+</strong><br><strong>(en la pila)</strong></p> | **5to+ argumento para el método** |
### Swift
@ -253,14 +257,22 @@ La depuración de aplicaciones implica ejecutar una aplicación en un entorno co
## Fuzzing de aplicaciones
El fuzzing de aplicaciones implica enviar entradas aleatorias o maliciosas a una aplicación para encontrar posibles vulnerabilidades. Esto puede ayudarte a identificar errores de programación, condiciones de carrera y otros problemas de seguridad.
El fuzzing es una técnica que implica enviar entradas aleatorias o maliciosas a una aplicación para encontrar posibles vulnerabilidades. Esta técnica es especialmente útil para descubrir vulnerabilidades de seguridad desconocidas.
### Herramientas de fuzzing
- [AFL](https://github.com/google/AFL) - American Fuzzy Lop es una herramienta de fuzzing que utiliza técnicas de generación de mutaciones para encontrar errores en aplicaciones.
- [Peach Fuzzer](https://peachfuzzer.com/) - Una plataforma de fuzzing que te permite crear y ejecutar casos de prueba automatizados para encontrar vulnerabilidades en aplicaciones.
- [AFL](http://lcamtuf.coredump.cx/afl/) - Un marco de fuzzing que utiliza la instrumentación de código para generar entradas aleatorias y encontrar posibles vulnerabilidades.
- [Peach Fuzzer](https://peachfuzzer.com/) - Una plataforma de fuzzing que te permite crear y ejecutar pruebas de fuzzing personalizadas.
- [Radamsa](https://gitlab.com/akihe/radamsa) - Una herramienta de generación de mutaciones que se utiliza en combinación con otras herramientas de fuzzing.
¡Explora estas herramientas y técnicas para mejorar tus habilidades de inspección, depuración y fuzzing de aplicaciones en macOS!
## Recursos adicionales
Aquí tienes algunos recursos adicionales que pueden ser útiles para inspeccionar, depurar y realizar fuzzing en aplicaciones en macOS:
- [Apple Developer Documentation](https://developer.apple.com/documentation/) - Documentación oficial de Apple sobre el desarrollo de aplicaciones en macOS.
- [Reverse Engineering Resources](https://github.com/onethawt/reverseengineering-resources) - Una lista curada de recursos de ingeniería inversa, que incluye herramientas y tutoriales.
¡Diviértete explorando y descubriendo las vulnerabilidades de las aplicaciones en macOS!
```bash
syscall:::entry
/pid == $1/
@ -304,13 +316,19 @@ sudo dtrace -s syscalls_info.d -c "cat /etc/hosts"
To use `dtruss`, you need to specify the process ID (PID) of the target application. You can find the PID using the `ps` command or by using tools like Activity Monitor.
Once you have the PID, you can run `dtruss` with the `-p` option followed by the PID. This will start tracing the system calls made by the application in real-time.
Once you have the PID, you can run `dtruss` with the following syntax:
By default, `dtruss` will display the system calls along with their arguments and return values. This can be useful for understanding how the application interacts with the operating system.
```bash
sudo dtruss -p <PID>
```
You can also filter the output of `dtruss` using various options. For example, you can use the `-n` option to only display system calls from a specific library or the `-s` option to only display system calls with a specific name.
The `sudo` command is required because `dtruss` needs root privileges to trace system calls.
`dtruss` can be a powerful tool for inspecting and debugging macOS applications. However, it should be used responsibly and only on applications that you have permission to analyze.
When `dtruss` is running, it will display a list of system calls made by the target process, along with their arguments and return values. This can be useful for understanding how an application interacts with the operating system and identifying any potential security vulnerabilities or performance issues.
Note that `dtruss` can generate a large amount of output, so it's recommended to redirect the output to a file for further analysis. You can do this by appending `> output.txt` to the `dtruss` command.
Keep in mind that `dtruss` is a powerful tool that should be used responsibly and with proper authorization. It can be used for legitimate purposes like debugging and troubleshooting, but it can also be misused for unauthorized access or malicious activities. Always ensure that you have the necessary permissions and legal authorization before using `dtruss` or any other similar tool.
```bash
dtruss -c ls #Get syscalls of ls
dtruss -c -p 1000 #get syscalls of PID 1000
@ -394,7 +412,7 @@ Cuando se llama a la función **`objc_sendMsg`**, el registro **rsi** contiene e
* Algunos malware también pueden **detectar** si la máquina es **VMware** basándose en la dirección MAC (00:50:56).
* También es posible encontrar si un proceso está siendo depurado con un código simple como:
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //proceso siendo depurado }`
* También puede invocar la llamada al sistema **`ptrace`** con la bandera **`PT_DENY_ATTACH`**. Esto **impide** que un depurador se adjunte y rastree.
* También puede invocar la llamada al sistema **`ptrace`** con la bandera **`PT_DENY_ATTACH`**. Esto **impide** que un depurador se adjunte y realice un seguimiento.
* Puede verificar si la función **`sysctl`** o **`ptrace`** está siendo **importada** (pero el malware podría importarla dinámicamente)
* Como se señala en este artículo, "[Derrotando Técnicas Anti-Depuración: variantes de ptrace en macOS](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)":\
"_El mensaje Process # exited with **status = 45 (0x0000002d)** generalmente es una señal reveladora de que el objetivo de depuración está utilizando **PT\_DENY\_ATTACH**_"
@ -416,12 +434,12 @@ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Roo
launchctl load -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist
```
### Dormir
### Suspensión
Cuando se realiza fuzzing en un MacOS, es importante evitar que la Mac se duerma:
Cuando se realiza fuzzing en MacOS, es importante evitar que la Mac entre en suspensión:
* systemsetup -setsleep Never
* pmset, Preferencias del Sistema
* pmset, Preferencias del sistema
* [KeepingYouAwake](https://github.com/newmarcel/KeepingYouAwake)
#### Desconexión SSH
@ -472,7 +490,7 @@ Funciona para herramientas de línea de comandos.
#### [Litefuzz](https://github.com/sec-tools/litefuzz)
Funciona con herramientas de GUI de macOS. Ten en cuenta que algunas aplicaciones de macOS tienen requisitos específicos como nombres de archivo únicos, la extensión correcta, necesidad de leer los archivos desde el sandbox (`~/Library/Containers/com.apple.Safari/Data`)...
Funciona con herramientas de GUI de macOS. Ten en cuenta que algunas aplicaciones de macOS tienen requisitos específicos como nombres de archivo únicos, la extensión correcta, necesitan leer los archivos desde el sandbox (`~/Library/Containers/com.apple.Safari/Data`)...
Algunos ejemplos:

View file

@ -35,7 +35,7 @@
* Las **aplicaciones del sistema** se encuentran en `/System/Applications`
* Las aplicaciones **instaladas** generalmente se instalan en `/Applications` o en `~/Applications`
* Los datos de la **aplicación** se pueden encontrar en `/Library/Application Support` para las aplicaciones que se ejecutan como root y en `~/Library/Application Support` para las aplicaciones que se ejecutan como el usuario.
* Los **daemonios** de aplicaciones de terceros que **necesitan ejecutarse como root** generalmente se encuentran en `/Library/PrivilegedHelperTools/`
* Los **demonios** de aplicaciones de terceros que **necesitan ejecutarse como root** generalmente se encuentran en `/Library/PrivilegedHelperTools/`
* Las aplicaciones **sandboxed** se mapean en la carpeta `~/Library/Containers`. Cada aplicación tiene una carpeta con el nombre del ID de paquete de la aplicación (`com.apple.Safari`).
* El **kernel** se encuentra en `/System/Library/Kernels/kernel`
* Las **extensiones de kernel de Apple** se encuentran en `/System/Library/Extensions`
@ -75,7 +75,7 @@ macOS almacena información como contraseñas en varios lugares:
* **`.noindex`**: Los archivos y carpetas con esta extensión no serán indexados por Spotlight.
### Paquetes de macOS
Básicamente, un paquete es una **estructura de directorios** dentro del sistema de archivos. Curiosamente, por defecto este directorio **se ve como un objeto único en Finder** (como `.app`).&#x20;
Básicamente, un paquete es una **estructura de directorios** dentro del sistema de archivos. Curiosamente, por defecto este directorio **se ve como un objeto único en Finder** (como `.app`).
{% content-ref url="macos-bundles.md" %}
[macos-bundles.md](macos-bundles.md)
@ -83,24 +83,30 @@ Básicamente, un paquete es una **estructura de directorios** dentro del sistema
## Caché compartida de Dyld
En macOS (y iOS), todas las bibliotecas compartidas del sistema, como los frameworks y dylibs, se **combinan en un solo archivo**, llamado **caché compartida de Dyld**. Esto mejora el rendimiento, ya que el código se puede cargar más rápido.
En macOS (y iOS), todas las bibliotecas compartidas del sistema, como los frameworks y dylibs, se **combinan en un solo archivo**, llamado la **caché compartida de Dyld**. Esto mejora el rendimiento, ya que el código se puede cargar más rápido.
Similar a la caché compartida de Dyld, el kernel y las extensiones del kernel también se compilan en una caché del kernel, que se carga al iniciar el sistema.
Para extraer las bibliotecas del archivo único de la caché compartida de dylib, era posible utilizar el binario [dyld\_shared\_cache\_util](https://www.mbsplugins.de/files/dyld\_shared\_cache\_util-dyld-733.8.zip), que puede que no funcione en la actualidad:
Para extraer las bibliotecas del archivo único de la caché compartida de dylib, era posible utilizar el binario [dyld\_shared\_cache\_util](https://www.mbsplugins.de/files/dyld\_shared\_cache\_util-dyld-733.8.zip), que puede que no funcione en la actualidad, pero también puedes usar [**dyldextractor**](https://github.com/arandomdev/dyldextractor):
{% code overflow="wrap" %}
```bash
# dyld_shared_cache_util
dyld_shared_cache_util -extract ~/shared_cache/ /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e
# dyldextractor
dyldex -l [dyld_shared_cache_path] # List libraries
dyldex_all [dyld_shared_cache_path] # Extract all
# More options inside the readme
```
{% endcode %}
En versiones anteriores, es posible encontrar la **caché compartida** en **`/System/Library/dyld/`**.
En iOS, puedes encontrarlas en **`/System/Library/Caches/com.apple.dyld/`**.
{% hint style="success" %}
Ten en cuenta que incluso si la herramienta `dyld_shared_cache_util` no funciona, puedes pasar el **binario dyld compartido a Hopper** y Hopper podrá identificar todas las bibliotecas y permitirte **seleccionar cuál** quieres investigar:
Ten en cuenta que incluso si la herramienta `dyld_shared_cache_util` no funciona, puedes pasar el **binario compartido de dyld a Hopper** y Hopper podrá identificar todas las bibliotecas y permitirte **seleccionar cuál** quieres investigar:
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (680).png" alt="" width="563"><figcaption></figcaption></figure>
@ -109,7 +115,7 @@ Ten en cuenta que incluso si la herramienta `dyld_shared_cache_util` no funciona
### Permisos de carpeta
En una **carpeta**, **leer** permite **listarla**, **escribir** permite **eliminar** y **escribir** archivos en ella, y **ejecutar** permite **atravesar** el directorio. Por lo tanto, por ejemplo, un usuario con **permiso de lectura sobre un archivo** dentro de un directorio donde no tiene permiso de **ejecución no podrá leer** el archivo.
En una **carpeta**, **leer** permite **listarla**, **escribir** permite **eliminar** y **escribir** archivos en ella, y **ejecutar** permite **atravesar** el directorio. Por lo tanto, por ejemplo, un usuario con **permiso de lectura sobre un archivo** dentro de un directorio donde no tiene permiso de **ejecución** **no podrá leer** el archivo.
### Modificadores de bandera

View file

@ -34,14 +34,18 @@ ps -ef | grep tcc
```
Los permisos se heredan de la aplicación padre y se rastrean según el ID de paquete y el ID de desarrollador.
### Base de datos TCC
### Base de datos de TCC
Las selecciones se almacenan en la base de datos TCC del sistema en **`/Library/Application Support/com.apple.TCC/TCC.db`** o en **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** para las preferencias por usuario. Las bases de datos están protegidas contra la edición con SIP (Protección de Integridad del Sistema), pero puedes leerlas.
Las selecciones se almacenan en la base de datos de TCC en todo el sistema en **`/Library/Application Support/com.apple.TCC/TCC.db`** o en **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** para las preferencias por usuario. Las bases de datos están protegidas contra la edición con SIP (Protección de Integridad del Sistema), pero se pueden leer.
{% hint style="danger" %}
La base de datos de TCC en iOS se encuentra en **`/private/var/mobile/Library/TCC/TCC.db`**
{% endhint %}
Además, un proceso con **acceso completo al disco** puede editar la base de datos en modo de usuario.
{% hint style="info" %}
La interfaz de usuario del centro de notificaciones puede realizar cambios en la base de datos TCC del sistema:
La **interfaz de usuario del centro de notificaciones** puede realizar cambios en la base de datos de TCC del sistema:
{% code overflow="wrap" %}
```bash
@ -150,7 +154,11 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
```
Esto evitará que Calendar solicite al usuario acceso a recordatorios, calendario y la libreta de direcciones.
### Lugares sensibles sin protección
{% hint style="success" %}
Además de la documentación oficial sobre los permisos, también es posible encontrar **información interesante sobre los permisos en** [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)
{% endhint %}
### Lugares sensibles desprotegidos
* $HOME (en sí mismo)
* $HOME/.ssh, $HOME/.aws, etc

View file

@ -3,7 +3,7 @@
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y automatizar fácilmente flujos de trabajo con las herramientas comunitarias más avanzadas del mundo.\
Utilice [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir y **automatizar flujos de trabajo** con las herramientas comunitarias más avanzadas del mundo.\
Obtenga acceso hoy mismo:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -28,7 +28,7 @@ Obtenga acceso hoy mismo:
## Entorno de Pruebas
En esta página puedes encontrar información sobre el **simulador de iOS**, los **emuladores** y el **jailbreaking**:
En esta página puedes encontrar información sobre el **simulador de iOS**, **emuladores** y **jailbreaking**:
{% content-ref url="ios-testing-environment.md" %}
[ios-testing-environment.md](ios-testing-environment.md)
@ -38,7 +38,7 @@ En esta página puedes encontrar información sobre el **simulador de iOS**, los
### Operaciones Básicas de Pruebas en iOS
Durante las pruebas, se sugerirán **varias operaciones** (conectar al dispositivo, leer/escribir/subir/descargar archivos, usar algunas herramientas...). Por lo tanto, si no sabes cómo realizar alguna de estas acciones, por favor, **comienza leyendo la página**:
Durante las pruebas se sugerirán **varias operaciones** (conectar al dispositivo, leer/escribir/subir/descargar archivos, usar algunas herramientas...). Por lo tanto, si no sabes cómo realizar alguna de estas acciones, por favor, **comienza leyendo la página**:
{% content-ref url="basic-ios-testing-operations.md" %}
[basic-ios-testing-operations.md](basic-ios-testing-operations.md)
@ -51,28 +51,28 @@ Lee la página [Operaciones Básicas de Pruebas en iOS](basic-ios-testing-operat
### Análisis Estático Básico
Se recomienda utilizar la herramienta [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) para realizar un análisis estático automático del archivo IPA.
Se recomienda utilizar la herramienta [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) para realizar un Análisis Estático automático del archivo IPA.
Identificación de las **protecciones presentes en el binario**:
* **PIE (Ejecutable Independiente de la Posición)**: Cuando está habilitado, la aplicación se carga en una dirección de memoria aleatoria cada vez que se inicia, lo que dificulta predecir su dirección de memoria inicial.
```
```bash
otool -hv <app-binary> | grep PIE # Debería incluir la marca PIE
```
* **Canarios de Pila**: Para validar la integridad de la pila, se coloca un valor 'canario' en la pila antes de llamar a una función y se valida nuevamente una vez que la función termina.
```
```bash
otool -I -v <app-binary> | grep stack_chk # Debería incluir los símbolos: stack_chk_guard y stack_chk_fail
```
* **ARC (Conteo Automático de Referencias)**: Para prevenir fallas comunes de corrupción de memoria
```
```bash
otool -I -v <app-binary> | grep objc_release # Debería incluir el símbolo _objc_release
```
* **Binario Encriptado**: El binario debe estar encriptado
```
```bash
otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # El cryptid debería ser 1
```
@ -80,7 +80,7 @@ otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # El cryptid debería s
* **Algoritmos de Hash Débiles**
```
```bash
# En el dispositivo iOS
otool -Iv <app> | grep -w "_CC_MD5"
otool -Iv <app> | grep -w "_CC_SHA1"
@ -91,7 +91,7 @@ grep -iER "_CC_SHA1"
```
* **Funciones Aleatorias Inseguras**
```
```bash
# En el dispositivo iOS
otool -Iv <app> | grep -w "_random"
otool -Iv <app> | grep -w "_srand"
@ -104,7 +104,7 @@ grep -iER "_rand"
```
* **Función 'Malloc' Insegura**
```
```bash
# En el dispositivo iOS
otool -Iv <app> | grep -w "_malloc"
@ -113,7 +113,7 @@ grep -iER "_malloc"
```
* **Funciones Inseguras y Vulnerables**
```
```bash
# En el dispositivo iOS
otool -Iv <app> | grep -w "_gets"
otool -Iv <app> | grep -w "_memcpy"
@ -173,7 +173,7 @@ Los archivos `.ipa` son **paquetes comprimidos**, por lo que puedes cambiar la e
Después de descomprimirlos, deberías ver `<NOMBRE>.app`, un archivo comprimido que contiene el resto de los recursos.
* `Info.plist`: Un archivo que contiene algunas de las configuraciones específicas de la aplicación.
* `_CodeSignature/` contiene un archivo plist con una firma sobre todos los archivos del bundle.
* `_CodeSignature/` contiene un archivo plist con una firma sobre todos los archivos en el bundle.
* `Assets.car`: Otro archivo comprimido que contiene recursos (iconos).
* `Frameworks/` contiene las bibliotecas nativas de la aplicación como archivos .dylib o .framework.
* `PlugIns/` puede contener extensiones de la aplicación como archivos .appex (no presentes en el ejemplo).
@ -576,23 +576,9 @@ Objective-C:
Objective-C es un lenguaje de programación utilizado para desarrollar aplicaciones en iOS. Es un lenguaje orientado a objetos que se basa en el lenguaje C. Objective-C es ampliamente utilizado para desarrollar aplicaciones nativas de iOS y ofrece una amplia gama de funcionalidades y bibliotecas para facilitar el desarrollo de aplicaciones.
En el contexto de la piratería ética, el conocimiento de Objective-C es útil para realizar pruebas de penetración en aplicaciones iOS. Al comprender cómo funciona Objective-C, los piratas informáticos éticos pueden identificar posibles vulnerabilidades y explotarlas de manera efectiva.
En el contexto de la piratería ética, el conocimiento de Objective-C es útil para realizar pruebas de penetración en aplicaciones iOS. Al comprender cómo se escriben y estructuran las aplicaciones en Objective-C, los piratas informáticos pueden identificar posibles vulnerabilidades y explotarlas para obtener acceso no autorizado a la aplicación o a los datos del usuario.
Algunos conceptos clave en Objective-C incluyen:
- Clases: las clases son la base de la programación orientada a objetos en Objective-C. Una clase define un conjunto de propiedades y métodos que describen un objeto en particular.
- Herencia: Objective-C admite la herencia, lo que significa que una clase puede heredar propiedades y métodos de otra clase. Esto permite la reutilización de código y la creación de jerarquías de clases.
- Mensajes: en Objective-C, los objetos se comunican entre sí enviándose mensajes. Un mensaje es una solicitud para que un objeto realice una acción o devuelva un valor.
- Propiedades: las propiedades son variables asociadas a una clase. Pueden ser de diferentes tipos, como enteros, cadenas o incluso objetos.
- Métodos: los métodos son funciones asociadas a una clase. Pueden realizar acciones o devolver valores.
- Protocolos: los protocolos definen un conjunto de métodos que una clase puede implementar. Permiten la comunicación entre objetos de diferentes clases.
En resumen, Objective-C es un lenguaje de programación utilizado para desarrollar aplicaciones iOS y es importante para los piratas informáticos éticos que desean realizar pruebas de penetración en aplicaciones iOS. Al comprender los conceptos clave de Objective-C, los piratas informáticos éticos pueden identificar y explotar vulnerabilidades en estas aplicaciones.
Algunas técnicas comunes de piratería en aplicaciones iOS incluyen la inyección de código, la manipulación de datos en tránsito, la ingeniería inversa y la explotación de vulnerabilidades conocidas. Con un conocimiento sólido de Objective-C, los piratas informáticos pueden aprovechar estas técnicas para descubrir y explotar vulnerabilidades en aplicaciones iOS y, en última instancia, mejorar la seguridad de las aplicaciones.
```
@property (UIImageView *)backgroundImage;
@ -616,7 +602,7 @@ También puedes usar `ios keychain dump` de [**Objection**](https://github.com/s
**NSURLCredential**
**NSURLCredential** es la clase perfecta para **almacenar el nombre de usuario y la contraseña en el keychain**. No es necesario preocuparse por NSUserDefaults ni por ningún envoltorio de keychain.\
**NSURLCredential** es la clase perfecta para **almacenar nombre de usuario y contraseña en el keychain**. No es necesario preocuparse por NSUserDefaults ni por ningún envoltorio de keychain.\
Una vez que el usuario ha iniciado sesión, puedes almacenar su nombre de usuario y contraseña en el keychain:
```swift
NSURLCredential *credential;
@ -706,7 +692,7 @@ Puedes recopilar los registros de la consola a través de la ventana **Dispositi
5. Reproduce el problema.
6. Haz clic en el botón **Abrir consola** ubicado en la parte superior derecha de la ventana Dispositivos para ver los registros de la consola en una ventana separada.
![](<../../.gitbook/assets/image (466) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (15).png>)
![](<../../.gitbook/assets/image (466) (2) (2) (2) (2) (2) (2) (2) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (15).png>)
También puedes conectarte a la shell del dispositivo como se explica en Acceso a la shell del dispositivo, instalar **socat** a través de **apt-get** y ejecutar el siguiente comando:
```bash
@ -768,11 +754,11 @@ Para identificar si una copia de seguridad está encriptada, puedes verificar la
```
En caso de que necesites trabajar con una copia de seguridad encriptada, hay algunos scripts en Python en el repositorio de GitHub de DinoSec, como **backup_tool.py** y **backup_passwd.py**, que servirán como un buen punto de partida. Sin embargo, ten en cuenta que es posible que no funcionen con las últimas versiones de iTunes/Finder y es posible que necesiten ajustes.
También puedes utilizar la herramienta **iOSbackup** para leer y extraer fácilmente archivos de una copia de seguridad de iOS encriptada con contraseña.
También puedes utilizar la herramienta **iOSbackup** para leer y extraer fácilmente archivos de una copia de seguridad de iOS protegida con contraseña.
**Cómo modificar el comportamiento**
En la aplicación de billetera de Bitcoin de código abierto, Bither, verás que es posible configurar un PIN para bloquear la interfaz de usuario. Este PIN se almacena en el archivo `net.bither.plist` dentro de la **clave** **pin_code**. Si borras esta clave de ese plist en la copia de seguridad y restauras la copia de seguridad, podrás acceder a la billetera.
En la aplicación de billetera de Bitcoin de código abierto, Bither, verás que es posible configurar un PIN para bloquear la interfaz de usuario. Este PIN se almacena en el archivo `net.bither.plist` dentro de la clave **pin_code**. Si borras esta clave de ese plist en la copia de seguridad y restauras la copia de seguridad, podrás acceder a la billetera.
## Pruebas de memoria para datos sensibles
@ -967,26 +953,7 @@ let password = String(data: queryResult as! Data, encoding: .utf8)!
```
{% tab title="Objective-C" %}
El siguiente es un ejemplo de código Objective-C para realizar una solicitud HTTP utilizando la biblioteca AFNetworking:
```objective-c
#import <AFNetworking/AFNetworking.h>
- (void)makeHTTPRequest {
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:@"https://api.example.com/data" parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) {
NSLog(@"Response: %@", responseObject);
} failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}
```
Este código utiliza AFNetworking para realizar una solicitud GET a la URL "https://api.example.com/data". El resultado de la solicitud se imprime en la consola.
Para utilizar AFNetworking en su proyecto Objective-C, debe agregar la biblioteca a su proyecto y asegurarse de importarla en su archivo de implementación.
Puede encontrar más información sobre AFNetworking en su [repositorio de GitHub](https://github.com/AFNetworking/AFNetworking).
El siguiente es un contenido de un libro de hacking sobre técnicas de hacking. El siguiente contenido es del archivo mobile-pentesting/ios-pentesting/README.md. Traduzca el texto relevante al español y devuelva la traducción manteniendo exactamente la misma sintaxis de markdown y html. No traduzca cosas como código, nombres de técnicas de hacking, palabras de hacking, nombres de plataformas en la nube/SaaS (como Workspace, aws, gcp...), la palabra 'leak', pentesting y etiquetas de markdown. Tampoco agregue nada adicional aparte de la traducción y la sintaxis de markdown.
{% endtab %}
```objectivec
@ -1185,14 +1152,14 @@ Además, algunos SDK comienzan a **contener malware una vez que son muy confiabl
Además, las características que estos servicios proporcionan pueden implicar servicios de **rastreo para monitorear el comportamiento del usuario** mientras utiliza la aplicación, vender anuncios de banner o mejorar la experiencia del usuario. El inconveniente de los servicios de terceros es que los desarrolladores no conocen los detalles del código ejecutado a través de las bibliotecas de terceros. En consecuencia, no se debe enviar más información de la necesaria a un servicio y no se debe divulgar información confidencial.
El inconveniente es que un **desarrollador no conoce en detalle qué código se ejecuta a través de las bibliotecas de terceros** y, por lo tanto, renuncia a la visibilidad. En consecuencia, se debe asegurar que no se envíe más información de la necesaria al servicio y que no se divulgue información confidencial.
La desventaja es que un **desarrollador no conoce en detalle qué código se ejecuta a través de las bibliotecas de terceros** y, por lo tanto, renuncia a la visibilidad. En consecuencia, se debe asegurar que no se envíe más información de la necesaria al servicio y que no se divulgue información confidencial.
La mayoría de los servicios de terceros se implementan de dos formas:
* con una biblioteca independiente
* con un SDK completo
Todos los datos que se envían a los servicios de terceros deben ser anonimizados para evitar la exposición de información de identificación personal (PII, por sus siglas en inglés) que permitiría al tercero identificar la cuenta de usuario.
Todos los datos que se envían a servicios de terceros deben ser anonimizados para evitar la exposición de PII (Información de Identificación Personal) que permitiría al tercero identificar la cuenta de usuario.
Puedes encontrar las **bibliotecas utilizadas por una aplicación** ejecutando **`otool`** contra la aplicación (y **ejecutándolo** contra **cada** biblioteca **compartida** para encontrar más bibliotecas compartidas utilizadas).