hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-default-sandbox-debug.md

6.6 KiB

Débogage du bac à sable par défaut de macOS

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Sur cette page, vous pouvez trouver comment créer une application pour exécuter des commandes arbitraires à partir du bac à sable par défaut de macOS :

  1. Compilez l'application :

{% code title="main.m" %}

#include <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {
while (true) {
char input[512];

printf("Enter command to run (or 'exit' to quit): ");
if (fgets(input, sizeof(input), stdin) == NULL) {
break;
}

// Remove newline character
size_t len = strlen(input);
if (len > 0 && input[len - 1] == '\n') {
input[len - 1] = '\0';
}

if (strcmp(input, "exit") == 0) {
break;
}

system(input);
}
}
return 0;
}

{% endcode %}

Compilez-le en exécutant : clang -framework Foundation -o SandboxedShellApp main.m

  1. Construisez le bundle .app
mkdir -p SandboxedShellApp.app/Contents/MacOS
mv SandboxedShellApp SandboxedShellApp.app/Contents/MacOS/

cat << EOF > SandboxedShellApp.app/Contents/Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>com.example.SandboxedShellApp</string>
<key>CFBundleName</key>
<string>SandboxedShellApp</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>CFBundleExecutable</key>
<string>SandboxedShellApp</string>
</dict>
</plist>
EOF
  1. Définir les privilèges

Les privilèges sont des autorisations spécifiques accordées à une application pour accéder à certaines ressources ou fonctionnalités du système d'exploitation. Ils sont définis dans le fichier d'entitlements d'une application macOS. Les entitlements déterminent les actions qu'une application est autorisée à effectuer, telles que l'accès aux fichiers, aux services réseau, aux périphériques, etc.

Les entitlements peuvent être utilisés pour restreindre les actions d'une application dans le bac à sable macOS. Par exemple, une application peut être autorisée à accéder uniquement à certains fichiers ou à utiliser uniquement certains services réseau spécifiés dans ses entitlements.

Les entitlements peuvent également être utilisés pour accorder des privilèges supplémentaires à une application, tels que l'accès à des fonctionnalités spécifiques du système d'exploitation ou à des ressources sensibles. Cependant, l'attribution de privilèges supplémentaires doit être effectuée avec prudence, car cela peut augmenter le risque de vulnérabilités et d'abus potentiels.

Il est important de définir avec précision les entitlements d'une application afin de garantir un niveau approprié de sécurité et de protection des données. Une mauvaise configuration des entitlements peut entraîner des failles de sécurité et des risques de violation de la confidentialité des utilisateurs.

cat << EOF > entitlements.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
</dict>
</plist>
EOF
  1. Signez l'application (vous devez créer un certificat dans le trousseau de clés)
codesign --entitlements entitlements.plist -s "YourIdentity" SandboxedShellApp

# An d in case you need this in the future
codesign --remove-signature SandboxedShellApp.app
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥