Pourquoi isoler ses téléchargements ?
Quand on télécharge des fichiers depuis internet, on s'expose à des risques : binaires malveillants, scripts vérolés, ou simplement ce moment d'inattention où on double-clique par réflexe sur un exécutable douteux.
Sur Linux, une pratique courante consiste à monter certains répertoires (comme /tmp ou un dossier de téléchargements) avec l'option noexec, qui empêche l'exécution directe de tout binaire présent sur cette partition.
Bonne nouvelle : c'est aussi possible sur macOS ! L'idée est de créer une image disque dédiée, montée automatiquement avec les options noexec et nosuid.
Cas d'usage
- Téléchargements depuis le navigateur (configurer le navigateur pour télécharger dans ce dossier)
- Binaires suspects récupérés lors de CTF ou challenges de sécurité (HackTheBox, TryHackMe…)
- Pièces jointes d'emails avant analyse
- Tout fichier provenant d'une source non fiable
Limitations à connaître
L'option noexec n'est pas une protection absolue :
- Un utilisateur peut toujours copier le fichier ailleurs avant de l'exécuter
- Un script peut être exécuté via un interpréteur (
/bin/bash script.shfonctionnera) - Les fichiers peuvent toujours être ouverts par des applications
C'est une couche de défense supplémentaire, pas une solution miracle. Elle protège surtout contre les exécutions accidentelles.
Prérequis
- macOS (testé sur Ventura/Sonoma/Sequoia)
- Droits administrateur (sudo)
- Environ 5 Go d'espace disque (ajustable)
Étape 1 : créer l'image disque
On crée une image disque APFS qui servira de conteneur pour notre répertoire sécurisé.
# Créer le point de montage
mkdir ~/htb_downloads
# Créer l'image disque (5 Go, ajustez selon vos besoins)
hdiutil create -size 5g -fs APFS -volname htb_downloads ~/.htb_downloads.dmgLe fichier .htb_downloads.dmg est créé dans votre home. Le point devant le nom le rend caché dans le Finder.
Étape 2 : créer le script de montage
Sur macOS, hdiutil ne supporte pas directement l'option -noexec. Il faut donc procéder en deux temps : attacher l'image sans la monter, puis la monter manuellement avec les bonnes options.
sudo tee /usr/local/bin/htb_mount.sh << 'EOF'
#!/bin/bash
# Attacher l'image et récupérer le volume APFS synthétisé
OUTPUT=$(/usr/bin/hdiutil attach /Users/VOTRE_USER/.htb_downloads.dmg -nomount)
DEVICE=$(echo "$OUTPUT" | tail -1 | awk '{print $1}')
# Monter avec noexec et nosuid
/sbin/mount -t apfs -o noexec,nosuid "$DEVICE" /Users/VOTRE_USER/htb_downloads
EOF
sudo chmod +x /usr/local/bin/htb_mount.shN'oubliez pas de remplacer VOTRE_USER par votre nom d'utilisateur (deux occurrences).
Étape 3 : configurer le montage automatique au boot
On utilise un LaunchDaemon (et non un LaunchAgent) car le montage avec noexec nécessite les droits root.
sudo tee /Library/LaunchDaemons/com.htb.downloads.plist << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.htb.downloads</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/usr/local/bin/htb_mount.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
EOF
# Charger le daemon
sudo launchctl load /Library/LaunchDaemons/com.htb.downloads.plistÉtape 4 : tester la configuration
# Vérifier que le volume est monté avec les bonnes options
mount | grep htb_downloadsVous devriez voir quelque chose comme :
/dev/disk5s1 on /Users/votre_user/htb_downloads (apfs, local, noexec, nosuid, journaled)Testons que noexec fonctionne :
# Créer un script de test
echo '#!/bin/bash' > ~/htb_downloads/test.sh
echo 'echo "pwned"' >> ~/htb_downloads/test.sh
chmod +x ~/htb_downloads/test.sh
# Essayer de l'exécuter
~/htb_downloads/test.shRésultat attendu : Permission denied
Étape 5 : configurer votre navigateur (optionnel)
Pour une protection maximale, configurez votre navigateur pour télécharger directement dans ce dossier :
Firefox : Préférences → Général → Téléchargements → Enregistrer les fichiers dans → ~/htb_downloads
Chrome : Paramètres → Téléchargements → Emplacement → ~/htb_downloads
Safari : Préférences → Général → Emplacement de téléchargement des fichiers → ~/htb_downloads
Commandes utiles
# Vérifier l'état du montage
mount | grep htb_downloads
# Démonter manuellement
sudo umount ~/htb_downloads
hdiutil detach /dev/diskX # remplacer X par le bon numéro
# Trouver le numéro de disk
mount | grep htb_downloads | awk -F'/' '{print $3}' | cut -d's' -f1
# ou plus verbeux :
hdiutil info | grep -B 20 htb_downloads | grep "^/dev"
# Remonter manuellement
sudo /usr/local/bin/htb_mount.sh
# Voir l'espace utilisé
df -h ~/htb_downloadsImpact sur les outils d'analyse de binaires
Si vous faites du reverse engineering ou de l'analyse de malware, vous vous demandez peut-être si noexec va gêner vos outils. La réponse courte : ça dépend de comment l'outil fonctionne.
Outils bloqués par noexec
Les outils qui font un vrai appel système execve() pour lancer le binaire seront bloqués :
# Ces commandes échoueront avec "Permission denied"
~/htb_downloads/malware # Exécution directe
strace ~/htb_downloads/malware # Trace les appels système
ltrace ~/htb_downloads/malware # Trace les appels de bibliothèque
gdb ~/htb_downloads/malware -ex "run" # Debugger en mode exécutionOutils non affectés
Les outils d'analyse statique qui se contentent de lire le fichier fonctionnent normalement :
# Analyse statique - fonctionne sans problème
file ~/htb_downloads/malware # Type de fichier
strings ~/htb_downloads/malware # Chaînes de caractères
hexdump -C ~/htb_downloads/malware # Dump hexadécimal
xxd ~/htb_downloads/malware # Autre visualisation hex
objdump -d ~/htb_downloads/malware # Désassemblage
readelf -a ~/htb_downloads/malware # Informations ELF
nm ~/htb_downloads/malware # Symboles
checksec ~/htb_downloads/malware # Protections du binaire
# Outils de reverse engineering (mode statique)
r2 -A ~/htb_downloads/malware # Radare2
rizin ~/htb_downloads/malware # Rizin
# Ghidra, IDA Pro, Binary Ninja... # Interfaces graphiquesCas particuliers (contournements possibles)
Certains outils peuvent contourner noexec car ils n'utilisent pas execve() :
- Radare2/Rizin en mode émulation (
aei,aep) : charge le code en mémoire et l'émule - Qemu-user : émule l'architecture, peut fonctionner selon l'implémentation
- Unicorn / Qiling : frameworks d'émulation qui chargent le binaire eux-mêmes
- LD_PRELOAD tricks : certaines techniques de chargement dynamique
Workflow recommandé pour l'analyse
# 1. Analyse statique dans le dossier noexec (safe)
file ~/htb_downloads/suspicious
strings ~/htb_downloads/suspicious | less
checksec ~/htb_downloads/suspicious
r2 -A ~/htb_downloads/suspicious
# 2. Si vous devez exécuter le binaire, copiez-le volontairement
cp ~/htb_downloads/suspicious /tmp/
strace /tmp/suspicious
# 3. Pour les trucs vraiment suspects : VM ou container
# Exegol, REMnux, FlareVM...Cette approche vous oblige à faire un geste délibéré pour exécuter un binaire, ce qui évite les accidents tout en ne gênant pas votre analyse statique.
Dépannage
Le volume ne se monte pas au reboot
Vérifiez que le LaunchDaemon est chargé :
sudo launchctl list | grep htbConsultez les logs :
log show --predicate 'eventMessage contains "htb"' --last 5mErreur "Inappropriate file type or format"
Le script récupère probablement le mauvais device. Vérifiez manuellement :
hdiutil attach ~/.htb_downloads.dmg -nomountNotez le dernier device listé (celui avec le GUID 41504653-...) et adaptez le script si nécessaire.
Permission denied pour créer des fichiers
Le volume est monté en root. Pour permettre à votre utilisateur d'écrire :
sudo chown -R $(whoami) ~/htb_downloadsPour aller plus loin
- Créer plusieurs volumes pour différents usages (downloads navigateur, CTF, pièces jointes…)
- Ajouter un cron qui vide automatiquement le dossier après X jours
- Combiner avec des outils d'analyse automatique (ClamAV, YARA…)
- Sur un Mac avec plusieurs utilisateurs, créer un volume partagé noexec dans
/Volumes
Conclusion
Cette configuration ajoute une couche de sécurité simple mais efficace contre les exécutions accidentelles de fichiers malveillants. C'est particulièrement utile pour les professionnels de la sécurité qui manipulent régulièrement des fichiers suspects, mais aussi pour tout utilisateur soucieux de sa sécurité.
Comme toujours en sécurité, c'est la défense en profondeur qui compte : cette mesure s'ajoute à votre antivirus, votre vigilance, et vos bonnes pratiques de téléchargement.