Gestion du Chiffrement FileVault Entreprise sur macOS
Gérez le chiffrement de disque FileVault sur votre déploiement MacFleet avec une surveillance complète, des rapports de conformité et une gestion automatisée du chiffrement. Ce tutoriel fournit des solutions de niveau entreprise pour maintenir la sécurité des données grâce au chiffrement de disque.
Comprendre le Chiffrement FileVault
FileVault est la technologie de chiffrement de disque complet d'Apple qui protège les données au repos sur les appareils macOS :
- Chiffrement de disque complet - Chiffre l'intégralité du disque de démarrage
- Algorithme de chiffrement XTS-AES-128 avec clé 256 bits
- Accélération matérielle sur les appareils Mac supportés
- Gestion des clés de récupération pour le déploiement d'entreprise
- Exigences de conformité pour les normes de protection des données
Surveillance Basique du Statut de Chiffrement
Vérifier le Statut FileVault
#!/bin/bash
# Vérifier le statut actuel du chiffrement FileVault
sudo fdesetup status
echo "Vérification du statut FileVault terminée"
Vérifier l'État du Chiffrement
#!/bin/bash
# Obtenir des informations détaillées sur le chiffrement
echo "=== Statut FileVault ==="
status=$(sudo fdesetup status)
echo "$status"
# Analyser le statut pour l'automatisation
if echo "$status" | grep -q "FileVault is On"; then
echo "✅ Chiffrement : ACTIVÉ"
exit 0
elif echo "$status" | grep -q "FileVault is Off"; then
echo "❌ Chiffrement : DÉSACTIVÉ"
exit 1
else
echo "⚠️ Chiffrement : ÉTAT INCONNU"
exit 2
fi
Surveillance de la Progression du Chiffrement
macOS 10.11 et 10.12 (Core Storage)
#!/bin/bash
# Surveiller la progression chiffrement/déchiffrement pour les anciennes versions macOS
echo "=== Progression du Chiffrement Core Storage ==="
progress=$(diskutil cs list | grep "Conversion Progress")
if [[ -n "$progress" ]]; then
echo "Chiffrement en cours :"
echo "$progress"
else
echo "Aucune opération de chiffrement/déchiffrement en cours"
fi
macOS 10.13+ (APFS)
#!/bin/bash
# Surveiller la progression du chiffrement pour APFS (macOS 10.13+)
echo "=== Progression du Chiffrement APFS ==="
# Vérifier la progression du chiffrement
enc_progress=$(diskutil apfs list | grep "Encryption Progress")
if [[ -n "$enc_progress" ]]; then
echo "Chiffrement en cours :"
echo "$enc_progress"
fi
# Vérifier la progression du déchiffrement
dec_progress=$(diskutil apfs list | grep "Decryption Progress")
if [[ -n "$dec_progress" ]]; then
echo "Déchiffrement en cours :"
echo "$dec_progress"
fi
if [[ -z "$enc_progress" && -z "$dec_progress" ]]; then
echo "Aucune opération de chiffrement/déchiffrement en cours"
fi
Moniteur de Progression Universel
#!/bin/bash
# Moniteur de progression de chiffrement universel
check_encryption_progress() {
local macos_version
macos_version=$(sw_vers -productVersion | cut -d. -f1-2)
echo "=== Moniteur de Progression du Chiffrement ==="
echo "Version macOS : $macos_version"
case "$macos_version" in
"10.11"|"10.12")
echo "Utilisation de la surveillance Core Storage..."
diskutil cs list | grep "Conversion Progress" || echo "Aucune progression détectée"
;;
*)
echo "Utilisation de la surveillance APFS..."
local enc_progress dec_progress
enc_progress=$(diskutil apfs list | grep "Encryption Progress")
dec_progress=$(diskutil apfs list | grep "Decryption Progress")
if [[ -n "$enc_progress" ]]; then
echo "Chiffrement : $enc_progress"
elif [[ -n "$dec_progress" ]]; then
echo "Déchiffrement : $dec_progress"
else
echo "Aucune opération de chiffrement/déchiffrement en cours"
fi
;;
esac
}
check_encryption_progress
Gestion d'Entreprise Avancée
Audit Complet du Chiffrement
#!/bin/bash
# Outil d'Audit FileVault Entreprise MacFleet
# Vérification complète du statut de chiffrement et de conformité
# Configuration
LOG_FILE="/var/log/macfleet_encryption.log"
REPORT_DIR="/var/log/macfleet_reports"
CONFIG_FILE="/etc/macfleet/encryption_policy.conf"
# Créer les répertoires s'ils n'existent pas
mkdir -p "$(dirname "$LOG_FILE")" "$REPORT_DIR" "$(dirname "$CONFIG_FILE")"
# Configuration par défaut
cat > "$CONFIG_FILE" 2>/dev/null << 'EOF' || true
# Configuration de la Politique de Chiffrement MacFleet
REQUIRE_FILEVAULT=true
ALERT_ON_DISABLED=true
MONITOR_PROGRESS=true
COMPLIANCE_REPORTING=true
AUTO_REMEDIATION=false
NOTIFICATION_EMAIL=""
EOF
# Charger la configuration
source "$CONFIG_FILE" 2>/dev/null || true
# Fonction de journalisation
log_action() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}
# Obtenir les informations système
get_system_info() {
echo "=== Informations Système ==="
echo "Nom d'hôte : $(hostname)"
echo "Version macOS : $(sw_vers -productVersion)"
echo "Build : $(sw_vers -buildVersion)"
echo "Matériel : $(system_profiler SPHardwareDataType | grep "Model Name" | awk -F: '{print $2}' | xargs)"
echo "Numéro de série : $(system_profiler SPHardwareDataType | grep "Serial Number" | awk -F: '{print $2}' | xargs)"
echo "Date d'audit : $(date)"
echo ""
}
# Vérifier le statut FileVault
check_filevault_status() {
echo "=== Analyse du Statut FileVault ==="
local status
status=$(sudo fdesetup status 2>/dev/null)
if echo "$status" | grep -q "FileVault is On"; then
echo "✅ Statut FileVault : ACTIVÉ"
log_action "Le chiffrement FileVault est correctement activé"
# Obtenir les utilisateurs activés
local enabled_users
enabled_users=$(sudo fdesetup list 2>/dev/null)
if [[ -n "$enabled_users" ]]; then
echo "Utilisateurs activés :"
echo "$enabled_users"
fi
return 0
elif echo "$status" | grep -q "FileVault is Off"; then
echo "❌ Statut FileVault : DÉSACTIVÉ"
log_action "ALERTE SÉCURITÉ : Le chiffrement FileVault est désactivé"
if [[ "$ALERT_ON_DISABLED" == "true" ]]; then
echo "⚠️ VIOLATION DE CONFORMITÉ : Chiffrement requis par la politique"
fi
return 1
else
echo "⚠️ Statut FileVault : INCONNU"
log_action "AVERTISSEMENT : Impossible de déterminer le statut FileVault"
return 2
fi
}
# Vérifier la progression du chiffrement
check_encryption_progress() {
echo "=== Progression du Chiffrement ==="
local macos_version
macos_version=$(sw_vers -productVersion | cut -d. -f1-2)
case "$macos_version" in
"10.11"|"10.12")
local cs_progress
cs_progress=$(diskutil cs list | grep "Conversion Progress")
if [[ -n "$cs_progress" ]]; then
echo "Progression Core Storage : $cs_progress"
log_action "Chiffrement/Déchiffrement en cours : $cs_progress"
else
echo "Aucune conversion Core Storage en cours"
fi
;;
*)
local enc_progress dec_progress
enc_progress=$(diskutil apfs list | grep "Encryption Progress")
dec_progress=$(diskutil apfs list | grep "Decryption Progress")
if [[ -n "$enc_progress" ]]; then
echo "Progression Chiffrement APFS : $enc_progress"
log_action "Chiffrement APFS en cours : $enc_progress"
elif [[ -n "$dec_progress" ]]; then
echo "Progression Déchiffrement APFS : $dec_progress"
log_action "Déchiffrement APFS en cours : $dec_progress"
else
echo "Aucun chiffrement/déchiffrement APFS en cours"
fi
;;
esac
}
# Vérifier les informations du disque
check_disk_info() {
echo "=== Informations Disque ==="
# Informations du disque de démarrage
local boot_disk
boot_disk=$(diskutil info / | grep "Device Node" | awk '{print $3}')
echo "Disque de démarrage : $boot_disk"
# Taille et utilisation du disque
echo "Utilisation du disque :"
df -h /
# Informations APFS (macOS 10.13+)
if command -v diskutil >/dev/null && diskutil apfs list >/dev/null 2>&1; then
echo -e "\nInformations Conteneur APFS :"
diskutil apfs list | grep -E "(Container|Volume|Encryption)"
fi
}
# Générer un rapport de conformité
generate_compliance_report() {
local report_file="$REPORT_DIR/encryption_compliance_$(date +%Y%m%d_%H%M%S).json"
echo "=== Génération du Rapport de Conformité ==="
# Obtenir le statut FileVault
local filevault_enabled=false
local status_detail=""
if sudo fdesetup status 2>/dev/null | grep -q "FileVault is On"; then
filevault_enabled=true
status_detail="activé"
else
status_detail="désactivé"
fi
# Créer le rapport JSON
cat > "$report_file" << EOF
{
"type_rapport": "conformite_chiffrement",
"horodatage": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"nom_hote": "$(hostname)",
"numero_serie": "$(system_profiler SPHardwareDataType | grep "Serial Number" | awk -F: '{print $2}' | xargs)",
"version_macos": "$(sw_vers -productVersion)",
"chiffrement": {
"filevault_active": $filevault_enabled,
"detail_statut": "$status_detail",
"statut_conformite": "$([ "$filevault_enabled" == "true" ] && echo "conforme" || echo "non_conforme")",
"politique_requise": $REQUIRE_FILEVAULT
},
"infos_disque": {
"disque_demarrage": "$(diskutil info / | grep "Device Node" | awk '{print $3}')",
"systeme_fichiers": "$(diskutil info / | grep "File System" | awk -F: '{print $2}' | xargs)"
},
"details_audit": {
"date_audit": "$(date)",
"version_politique": "1.0",
"remediation_requise": $([ "$filevault_enabled" != "true" ] && echo "true" || echo "false")
}
}
EOF
echo "Rapport de conformité sauvegardé dans : $report_file"
log_action "Rapport de conformité généré : $report_file"
}
# Actions de remédiation
perform_remediation() {
echo "=== Remédiation Automatisée ==="
if [[ "$AUTO_REMEDIATION" != "true" ]]; then
echo "Remédiation automatique désactivée dans la politique"
return 0
fi
# Vérifier si FileVault est désactivé
if ! sudo fdesetup status 2>/dev/null | grep -q "FileVault is On"; then
echo "⚠️ FileVault est désactivé - remédiation requise"
log_action "REMÉDIATION : Le chiffrement FileVault est désactivé"
echo "Étapes de remédiation manuelle :"
echo "1. Ouvrir Préférences Système > Sécurité et confidentialité"
echo "2. Cliquer sur l'onglet FileVault"
echo "3. Cliquer sur Activer FileVault"
echo "4. Suivre l'assistant de configuration"
echo ""
echo "Ou utiliser la MDM pour imposer la politique de chiffrement FileVault"
# Créer un ticket de remédiation (placeholder)
echo "Création d'un ticket de remédiation pour l'appareil : $(hostname)"
fi
}
# Fonction d'audit principale
main() {
log_action "=== Audit FileVault MacFleet Démarré ==="
get_system_info
check_filevault_status
local filevault_status=$?
echo ""
check_encryption_progress
echo ""
check_disk_info
echo ""
if [[ "$COMPLIANCE_REPORTING" == "true" ]]; then
generate_compliance_report
echo ""
fi
if [[ $filevault_status -ne 0 ]]; then
perform_remediation
fi
log_action "=== Audit FileVault terminé avec le statut : $filevault_status ==="
return $filevault_status
}
# Exécuter la fonction principale
main "$@"
Gestion des Politiques d'Entreprise
Modèle de Configuration de Politique
#!/bin/bash
# Créer une politique de chiffrement complète
cat > /etc/macfleet/encryption_policy.conf << 'EOF'
# Politique de Chiffrement Entreprise MacFleet
# Version : 2.0
# Exigences de Base
REQUIRE_FILEVAULT=true
ENFORCE_IMMEDIATE_ENCRYPTION=true
ALLOW_PERSONAL_RECOVERY_KEY=false
REQUIRE_INSTITUTIONAL_RECOVERY_KEY=true
# Configuration de Surveillance
ALERT_ON_DISABLED=true
MONITOR_PROGRESS=true
PROGRESS_CHECK_INTERVAL=3600 # secondes
COMPLIANCE_REPORTING=true
AUDIT_FREQUENCY=86400 # quotidien
# Paramètres de Remédiation
AUTO_REMEDIATION=false
ESCALATION_THRESHOLD=72 # heures
NOTIFICATION_EMAIL="securite@entreprise.com"
HELP_DESK_CONTACT="+33-1-55-00-12-34"
# Politiques de Sécurité
MIN_RECOVERY_KEY_LENGTH=24
RECOVERY_KEY_ROTATION_DAYS=90
ENCRYPTION_ALGORITHM="XTS-AES-128"
# Normes de Conformité
COMPLIANCE_FRAMEWORKS="SOC2,HIPAA,PCI-DSS"
DATA_CLASSIFICATION_REQUIRED=true
AUDIT_TRAIL_RETENTION_DAYS=2555 # 7 ans
EOF
echo "Politique de chiffrement d'entreprise configurée"
Gestion des Clés de Récupération
#!/bin/bash
# Gestion des clés de récupération d'entreprise
manage_recovery_keys() {
echo "=== Gestion des Clés de Récupération ==="
# Vérifier si la clé de récupération institutionnelle est définie
local has_institutional_key=false
if sudo fdesetup list 2>/dev/null | grep -q "institutional"; then
has_institutional_key=true
echo "✅ Clé de récupération institutionnelle configurée"
else
echo "❌ Aucune clé de récupération institutionnelle trouvée"
fi
# Valider la clé de récupération
if [[ "$has_institutional_key" == "true" ]]; then
echo "Validation de la clé de récupération :"
sudo fdesetup validaterecovery 2>/dev/null && echo "✅ Clé de récupération valide" || echo "❌ Clé de récupération invalide"
fi
# Dépôt de la clé de récupération (intégration MDM)
echo "Statut de dépôt de la clé de récupération :"
if system_profiler SPConfigurationProfileDataType | grep -q "FDERecoveryKeyEscrow"; then
echo "✅ Clé de récupération déposée dans la MDM"
else
echo "⚠️ Clé de récupération non déposée"
fi
}
manage_recovery_keys
Surveillance et Alertes
Script de Surveillance Continue
#!/bin/bash
# Démon de surveillance FileVault continue
DAEMON_NAME="macfleet-encryption-monitor"
PID_FILE="/var/run/${DAEMON_NAME}.pid"
CHECK_INTERVAL=300 # 5 minutes
# Fonctions du démon
start_monitoring() {
if [[ -f "$PID_FILE" ]]; then
echo "Démon de surveillance déjà en cours d'exécution (PID : $(cat "$PID_FILE"))"
return 1
fi
echo "Démarrage du démon de surveillance FileVault..."
# Boucle de surveillance en arrière-plan
(
while true; do
# Vérification rapide du statut
if ! sudo fdesetup status 2>/dev/null | grep -q "FileVault is On"; then
logger -t "$DAEMON_NAME" "ALERTE : Chiffrement FileVault désactivé sur $(hostname)"
# Envoyer une notification (personnaliser pour votre environnement)
osascript -e 'display notification "Le chiffrement FileVault est désactivé !" with title "Alerte Sécurité MacFleet"' 2>/dev/null || true
fi
sleep "$CHECK_INTERVAL"
done
) &
echo $! > "$PID_FILE"
echo "Démon de surveillance démarré (PID : $!)"
}
stop_monitoring() {
if [[ -f "$PID_FILE" ]]; then
local pid
pid=$(cat "$PID_FILE")
kill "$pid" 2>/dev/null
rm -f "$PID_FILE"
echo "Démon de surveillance arrêté"
else
echo "Démon de surveillance non en cours d'exécution"
fi
}
# Exécuter selon l'argument
case "${1:-start}" in
start)
start_monitoring
;;
stop)
stop_monitoring
;;
restart)
stop_monitoring
sleep 2
start_monitoring
;;
status)
if [[ -f "$PID_FILE" ]]; then
echo "Démon de surveillance en cours d'exécution (PID : $(cat "$PID_FILE"))"
else
echo "Démon de surveillance non en cours d'exécution"
fi
;;
*)
echo "Usage : $0 {start|stop|restart|status}"
exit 1
;;
esac
Notes de Sécurité Importantes
Bonnes Pratiques FileVault
- Activer avant le déploiement - Chiffrer les appareils avant le déploiement utilisateur
- Dépôt des clés de récupération - Utiliser la MDM pour la gestion centralisée des clés
- Rotation régulière des clés - Faire tourner périodiquement les clés de récupération institutionnelles
- Surveiller la conformité - Surveillance continue des violations de politique
- Tester les procédures de récupération - Tester régulièrement les processus de récupération de clés
Considérations d'Entreprise
- Impact sur les performances - Minimal sur le matériel Mac moderne avec T2/Apple Silicon
- Temps de chiffrement initial - Peut prendre plusieurs heures pour les gros disques
- Planification de récupération - Assurer la disponibilité des clés de récupération pour le support
- Formation des utilisateurs - Éduquer les utilisateurs sur les avantages du chiffrement et la récupération
- Rapports de conformité - Audits réguliers pour les exigences réglementaires
Considérations Apple Silicon
- Accélération matérielle - Performance de chiffrement optimisée
- Secure Enclave - Protection renforcée des clés
- Limitations de surveillance de progression - Certains outils de surveillance peuvent ne pas fonctionner
- Sécurité de démarrage - Fonctionnalités de sécurité supplémentaires au-delà de FileVault
N'oubliez pas de tester ces scripts de manière approfondie dans votre environnement avant de les déployer sur les appareils de production.