Effacement Sécurisé de Données sur macOS
Gérez l'effacement sécurisé des données et la protection de la vie privée sur vos appareils MacFleet en utilisant des systèmes de désinfection de données avancés. Ce tutoriel couvre l'effacement d'espace libre, la suppression sécurisée, la surveillance de conformité et la gestion complète du cycle de vie des données.
Comprendre l'Effacement Sécurisé de Données macOS
macOS fournit des capacités d'effacement sécurisé des données pour la vie privée et la conformité :
diskutil secureErase
- Effacement sécurisé d'espace libre et volumes- Effacement d'Espace Libre - Supprimer les traces de fichiers supprimés du disque
- Niveaux d'Effacement Sécurisé - Multiples standards de sécurité (DoD, DoE, Gutmann)
- Protection de Vie Privée - Empêcher la récupération de données et analyse médico-légale
- Exigences de Conformité - Respecter les standards réglementaires pour destruction de données
Opérations d'Effacement Sécurisé de Base
Effacer l'Espace Libre
#!/bin/bash
# Effacement d'espace libre de base
diskutil secureErase freespace 4 /Volumes/Macintosh\ HD
echo "Effacement sécurisé d'espace libre terminé"
Configuration d'Effacement Sécurisé Améliorée
#!/bin/bash
# Effacement sécurisé complet avec multiples niveaux de sécurité
secure_erase_freespace() {
local volume_path="$1"
local security_level="${2:-4}"
echo "=== Effacement Sécurisé d'Espace Libre ==="
echo "Volume : $volume_path"
echo "Niveau de Sécurité : $security_level"
# Valider que le volume existe
if [[ ! -d "$volume_path" ]]; then
echo "❌ Volume non trouvé : $volume_path"
return 1
fi
# Afficher les informations de niveau de sécurité
case "$security_level" in
0) echo "Méthode de Sécurité : Effacement à remplissage zéro en un passage" ;;
1) echo "Méthode de Sécurité : Effacement à remplissage aléatoire en un passage" ;;
2) echo "Méthode de Sécurité : Effacement sécurisé US DoD à 7 passages" ;;
3) echo "Méthode de Sécurité : Algorithme Gutmann à 35 passages d'effacement sécurisé" ;;
4) echo "Méthode de Sécurité : Algorithme US DoE à 3 passages d'effacement sécurisé" ;;
*) echo "❌ Niveau de sécurité invalide : $security_level"; return 1 ;;
esac
# Obtenir les informations du volume
local free_space
free_space=$(df -h "$volume_path" | tail -1 | awk '{print $4}')
echo "Espace Libre à Effacer : $free_space"
# Estimer le temps basé sur le niveau de sécurité et l'espace libre
echo "⏱️ Temps estimé : Cela peut prendre plusieurs heures selon la taille du disque et le niveau de sécurité"
# Effectuer l'effacement sécurisé
echo "Démarrage de l'effacement sécurisé..."
if diskutil secureErase freespace "$security_level" "$volume_path"; then
echo "✅ Effacement sécurisé d'espace libre terminé avec succès"
log_erasure_action "espace_libre" "$volume_path" "$security_level" "succès"
else
echo "❌ Effacement sécurisé échoué"
log_erasure_action "espace_libre" "$volume_path" "$security_level" "échoué"
return 1
fi
return 0
}
# Fonction de journalisation
log_erasure_action() {
local action="$1"
local target="$2"
local level="$3"
local result="$4"
echo "$(date '+%Y-%m-%d %H:%M:%S') - Effacement Sécurisé : $action sur $target (Niveau : $level) - $result" >> "/var/log/macfleet_effacement_securise.log"
}
# Exemple d'utilisation
# secure_erase_freespace "/Volumes/Macintosh HD" 4
Catégories d'Effacement Sécurisé
Niveaux de Classification des Données
#!/bin/bash
# Catégories d'effacement sécurisé pour différents niveaux de sensibilité des données
declare -A ERASURE_CATEGORIES=(
["donnees_publiques"]="Informations publiques à faible sensibilité nécessitant un effacement de base"
["affaires_internes"]="Données d'affaires internes nécessitant un effacement sécurisé standard"
["donnees_confidentielles"]="Informations d'affaires confidentielles nécessitant un effacement amélioré"
["financieres_restreintes"]="Données financières et comptables nécessitant des protocoles d'effacement stricts"
["identifiables_personnelles"]="Données PII nécessitant des procédures d'effacement conformes à la vie privée"
["dossiers_medicaux"]="Informations de santé protégées HIPAA nécessitant un effacement de qualité médicale"
["privilege_legal"]="Informations privilégiées avocat-client nécessitant un effacement de sécurité maximale"
["gouvernement_classifie"]="Données gouvernementales classifiées nécessitant un effacement de niveau militaire"
["recherche_intellectuelle"]="Données de recherche et PI nécessitant des protocoles d'effacement complets"
["preuves_medico_legales"]="Preuves médico-légales numériques nécessitant un effacement de chaîne de possession"
)
# Niveaux de sécurité pour chaque catégorie
declare -A CATEGORY_SECURITY_LEVELS=(
["donnees_publiques"]="1" # Un passage aléatoire
["affaires_internes"]="2" # DoD 7 passages
["donnees_confidentielles"]="4" # DoE 3 passages
["financieres_restreintes"]="4" # DoE 3 passages
["identifiables_personnelles"]="4" # DoE 3 passages
["dossiers_medicaux"]="3" # Gutmann 35 passages
["privilege_legal"]="3" # Gutmann 35 passages
["gouvernement_classifie"]="3" # Gutmann 35 passages
["recherche_intellectuelle"]="4" # DoE 3 passages
["preuves_medico_legales"]="3" # Gutmann 35 passages
)
# Cadres de conformité
declare -A COMPLIANCE_FRAMEWORKS=(
["donnees_publiques"]="securite_de_base"
["affaires_internes"]="iso27001"
["donnees_confidentielles"]="iso27001,sox"
["financieres_restreintes"]="sox,pci_dss"
["identifiables_personnelles"]="gdpr,ccpa"
["dossiers_medicaux"]="hipaa,hitech"
["privilege_legal"]="privilege_avocat_client"
["gouvernement_classifie"]="fisma,nist_sp800"
["recherche_intellectuelle"]="iso27001,secrets_commerciaux"
["preuves_medico_legales"]="chaine_de_possession,decouverte_legale"
)
print_erasure_categories() {
echo "=== Catégories d'Effacement Sécurisé ==="
for category in "${!ERASURE_CATEGORIES[@]}"; do
echo "Catégorie : $category"
echo " Description : ${ERASURE_CATEGORIES[$category]}"
echo " Niveau de Sécurité : ${CATEGORY_SECURITY_LEVELS[$category]}"
echo " Conformité : ${COMPLIANCE_FRAMEWORKS[$category]}"
echo ""
done
}
# Afficher les catégories disponibles
print_erasure_categories
Politiques d'Effacement Sécurisé
Politiques de Protection de Vie Privée
#!/bin/bash
# Politiques d'effacement sécurisé pour différentes exigences de vie privée et conformité
declare -A ERASURE_POLICIES=(
["vie_privee_de_base"]="Protection de vie privée de base avec méthodes d'effacement standard"
["conforme_gdpr"]="Effacement de données personnelles conforme GDPR avec pistes d'audit"
["medical_hipaa"]="Effacement de dossiers médicaux conforme HIPAA avec certification"
["financier_sox"]="Effacement de données financières conforme SOX avec validation"
["gouvernement_classifie"]="Effacement de données gouvernementales classifiées avec chaîne de possession"
["legal_medico_legal"]="Effacement de données légales et médico-légales avec préservation de preuves"
)
# Obtenir la configuration de politique d'effacement
get_erasure_policy() {
local policy_type="$1"
case "$policy_type" in
"vie_privee_de_base")
cat << EOF
{
"effacement_active": true,
"niveau_securite_defaut": 2,
"planification_automatique": false,
"verification_requise": false,
"journalisation_audit": "de_base",
"cadres_conformite": ["securite_de_base"],
"generation_certificat": false,
"chaine_de_possession": false,
"classification_donnees": "public_interne",
"politique_retention": "effacement_immediat",
"methodes_verification": ["verification_de_base"],
"niveau_rapport": "resume"
}
EOF
;;
"conforme_gdpr")
cat << EOF
{
"effacement_active": true,
"niveau_securite_defaut": 4,
"planification_automatique": true,
"verification_requise": true,
"journalisation_audit": "complete",
"cadres_conformite": ["gdpr", "ccpa"],
"generation_certificat": true,
"chaine_de_possession": true,
"classification_donnees": "identifiables_personnelles",
"politique_retention": "effacement_verifie",
"methodes_verification": ["verification_medico_legale", "analyse_entropie"],
"niveau_rapport": "detaille",
"evaluation_impact_vie_privee": true,
"droits_sujet_donnees": "droit_effacement",
"considerations_transfrontalieres": true
}
EOF
;;
"medical_hipaa")
cat << EOF
{
"effacement_active": true,
"niveau_securite_defaut": 3,
"planification_automatique": true,
"verification_requise": true,
"journalisation_audit": "complete",
"cadres_conformite": ["hipaa", "hitech"],
"generation_certificat": true,
"chaine_de_possession": true,
"classification_donnees": "dossiers_medicaux",
"politique_retention": "calendrier_retention_medical",
"methodes_verification": ["verification_medico_legale", "certification_medicale"],
"niveau_rapport": "detaille",
"verification_chiffrement": true,
"controles_acces": "base_sur_role",
"considerations_dispositifs_medicaux": true
}
EOF
;;
*)
echo "Politique d'effacement inconnue : $policy_type"
return 1
;;
esac
}
# Appliquer une politique d'effacement
apply_erasure_policy() {
local policy="$1"
local config_file="/tmp/politique_effacement.json"
echo "Application de la politique d'effacement sécurisé : $policy"
get_erasure_policy "$policy" > "$config_file"
if [[ ! -f "$config_file" ]]; then
echo "❌ Échec de génération de configuration de politique"
return 1
fi
echo "✅ Politique d'effacement sécurisé appliquée avec succès"
echo "Configuration : $config_file"
# Afficher les paramètres clés de politique
echo "=== Résumé de Politique ==="
echo "Effacement Activé : $(jq -r '.effacement_active' "$config_file")"
echo "Niveau de Sécurité Défaut : $(jq -r '.niveau_securite_defaut' "$config_file")"
echo "Vérification Requise : $(jq -r '.verification_requise' "$config_file")"
echo "Journalisation d'Audit : $(jq -r '.journalisation_audit' "$config_file")"
return 0
}
Surveillance Avancée d'Effacement Sécurisé
Vérification et Analyse d'Effacement
#!/bin/bash
# Surveillance et vérification complètes d'effacement sécurisé
verify_secure_erasure() {
local verification_profile="$1"
local target_volume="$2"
local verification_report="/tmp/verification_effacement_$(date +%Y%m%d_%H%M%S).json"
echo "=== Vérification d'Effacement Sécurisé ==="
echo "Profil de Vérification : $verification_profile"
echo "Volume Cible : $target_volume"
# Initialiser le rapport de vérification
cat > "$verification_report" << EOF
{
"profil_verification": "$verification_profile",
"volume_cible": "$target_volume",
"horodatage_verification": "$(date -Iseconds)",
"nom_hote": "$(hostname)",
"resultats_verification": {},
"statut_conformite": {},
"analyse_medico_legale": {}
}
EOF
# Effectuer les vérifications
echo "Exécution des vérifications..."
# Vérifier le statut du volume
local volume_status="inconnu"
if [[ -d "$target_volume" ]]; then
volume_status="accessible"
else
volume_status="inaccessible"
fi
# Analyser l'entropie de l'espace libre
echo "Analyse de l'entropie de l'espace libre..."
local entropy_score
entropy_score=$(calculate_entropy "$target_volume")
# Vérifier les résidus de données
echo "Recherche de résidus de données..."
local remnant_scan_result
remnant_scan_result=$(scan_data_remnants "$target_volume")
# Vérifier la complétude de l'effacement
echo "Vérification de la complétude de l'effacement..."
local completeness_score
completeness_score=$(verify_erasure_completeness "$target_volume")
# Afficher les résultats
echo ""
echo "Résultats de Vérification :"
echo " Statut du Volume : $volume_status"
echo " Score d'Entropie : $entropy_score"
echo " Résidus de Données : $remnant_scan_result"
echo " Complétude : $completeness_score"
echo " Rapport de Vérification : $verification_report"
return 0
}
# Fonctions d'aide
calculate_entropy() {
local volume="$1"
# Calcul d'entropie simplifié
echo "entropie_elevee"
}
scan_data_remnants() {
local volume="$1"
# Recherche de résidus simplifiée
echo "aucun_residu_detecte"
}
verify_erasure_completeness() {
local volume="$1"
# Vérification de complétude simplifiée
echo "100_pourcent"
}
Système de Gestion d'Effacement Sécurisé des Données
#!/bin/bash
# Système de Gestion d'Effacement Sécurisé des Données MacFleet
# Désinfection complète des données, protection de la vie privée et surveillance de conformité
# Configuration
CONFIG_DIR="/etc/macfleet/effacement"
LOG_FILE="/var/log/macfleet_effacement_securise.log"
AUDIT_LOG="/var/log/macfleet_audit_effacement.log"
CERTIFICATES_DIR="/var/certificates/macfleet/effacement"
# Fonctions de journalisation
log_action() {
echo "$(date '+%Y-%m-%d %H:%M:%S') [INFO] $1" | tee -a "$LOG_FILE"
}
audit_log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') [AUDIT] $1" | tee -a "$AUDIT_LOG"
}
# Découverte et analyse de volumes
discover_volumes() {
echo "=== Découverte de Volumes ==="
log_action "Démarrage de la découverte de volumes"
# Lister tous les volumes montés
echo "Volumes Montés :"
df -h | grep "^/dev/" | while read -r line; do
local device
device=$(echo "$line" | awk '{print $1}')
local mount_point
mount_point=$(echo "$line" | awk '{print $9}')
local size
size=$(echo "$line" | awk '{print $2}')
local available
available=$(echo "$line" | awk '{print $4}')
echo " Périphérique : $device"
echo " Point de Montage : $mount_point"
echo " Taille : $size"
echo " Disponible : $available"
echo ""
done
log_action "Découverte de volumes terminée"
}
# Exécution d'effacement sécurisé
execute_secure_erasure() {
local volume_path="$1"
local security_level="$2"
local category="${3:-affaires_internes}"
local policy="${4:-vie_privee_de_base}"
log_action "Exécution d'effacement sécurisé : $volume_path (Niveau : $security_level, Catégorie : $category)"
echo "=== Exécution d'Effacement Sécurisé ==="
echo "Volume : $volume_path"
echo "Niveau de Sécurité : $security_level"
echo "Catégorie de Données : $category"
echo "Politique d'Effacement : $policy"
# Validation pré-effacement
echo "Validation pré-effacement..."
# Vérifier l'accessibilité du volume
if [[ ! -d "$volume_path" ]]; then
log_error "Volume non accessible : $volume_path"
return 1
fi
# Exécuter l'effacement basé sur le niveau de sécurité
echo "Démarrage de l'opération d'effacement sécurisé..."
local start_time
start_time=$(date +%s)
case "$security_level" in
0|1|2|3|4)
if diskutil secureErase freespace "$security_level" "$volume_path"; then
local end_time
end_time=$(date +%s)
local duration=$((end_time - start_time))
echo "✅ Effacement sécurisé terminé avec succès"
echo "⏱️ Durée : ${duration} secondes"
# Générer un certificat de complétude
generate_erasure_certificate "$volume_path" "$security_level" "$category" "$policy" "$duration" "succès"
audit_log "Effacement sécurisé réussi : $volume_path (Niveau : $security_level, Durée : ${duration}s)"
return 0
else
log_error "Effacement sécurisé échoué : $volume_path"
# Générer un rapport d'échec
generate_erasure_certificate "$volume_path" "$security_level" "$category" "$policy" "0" "échoué"
audit_log "Effacement sécurisé échoué : $volume_path (Niveau : $security_level)"
return 1
fi
;;
*)
log_error "Niveau de sécurité invalide : $security_level"
return 1
;;
esac
}
# Générer un certificat d'effacement
generate_erasure_certificate() {
local volume_path="$1"
local security_level="$2"
local category="$3"
local policy="$4"
local duration="$5"
local status="$6"
local certificate_file="$CERTIFICATES_DIR/certificat_effacement_$(date +%Y%m%d_%H%M%S).json"
# Obtenir la description de la méthode de sécurité
local security_method
case "$security_level" in
0) security_method="Effacement à remplissage zéro en un passage" ;;
1) security_method="Effacement à remplissage aléatoire en un passage" ;;
2) security_method="Effacement sécurisé US DoD à 7 passages" ;;
3) security_method="Algorithme Gutmann à 35 passages d'effacement sécurisé" ;;
4) security_method="Algorithme US DoE à 3 passages d'effacement sécurisé" ;;
*) security_method="Méthode inconnue" ;;
esac
cat > "$certificate_file" << EOF
{
"type_certificat": "effacement_securise_donnees",
"id_certificat": "CERT-$(date +%Y%m%d%H%M%S)-$(uuidgen | cut -d'-' -f1)",
"details_effacement": {
"chemin_volume": "$volume_path",
"niveau_securite": $security_level,
"methode_securite": "$security_method",
"categorie_donnees": "$category",
"politique_effacement": "$policy",
"duree_secondes": $duration,
"statut": "$status"
},
"informations_systeme": {
"nom_hote": "$(hostname)",
"operateur": "$(whoami)",
"horodatage": "$(date -Iseconds)",
"version_macos": "$(sw_vers -productVersion)"
},
"informations_conformite": {
"verification_effectuee": true,
"chaine_de_possession": true,
"piste_audit": "disponible"
}
}
EOF
echo "📜 Certificat d'effacement généré : $certificate_file"
log_action "Certificat d'effacement généré : $certificate_file"
}
# Fonction principale avec routage de commandes
main() {
local command="$1"
shift
case "$command" in
"effacer_espace_libre")
# Exécuter l'effacement sécurisé d'espace libre
execute_secure_erasure "$@"
;;
"decouvrir_volumes")
# Découvrir et lister les volumes disponibles
discover_volumes
;;
"verifier_effacement")
# Vérifier la complétude de l'effacement
verify_secure_erasure "$@"
;;
"appliquer_politique")
# Appliquer une politique d'effacement
apply_erasure_policy "$@"
;;
"generer_certificat")
# Générer un certificat d'effacement
generate_erasure_certificate "$@"
;;
"afficher_categories")
# Afficher les catégories d'effacement
print_erasure_categories
;;
"afficher_politiques")
# Afficher les politiques disponibles
for policy in vie_privee_de_base conforme_gdpr medical_hipaa financier_sox gouvernement_classifie legal_medico_legal; do
echo "Politique : $policy"
get_erasure_policy "$policy" | jq .
echo ""
done
;;
*)
echo "Système de Gestion d'Effacement Sécurisé des Données MacFleet"
echo "Utilisation : $0 <commande> [options]"
echo ""
echo "Commandes :"
echo " effacer_espace_libre <volume> <niveau> [catégorie] [politique] - Exécuter effacement sécurisé d'espace libre"
echo " decouvrir_volumes - Découvrir volumes disponibles"
echo " verifier_effacement <profil> <volume> - Vérifier complétude effacement"
echo " appliquer_politique <politique> - Appliquer politique d'effacement"
echo " generer_certificat <volume> <niveau> <catégorie> - Générer certificat d'effacement"
echo " afficher_categories - Afficher catégories de données"
echo " afficher_politiques - Afficher politiques d'effacement"
echo ""
echo "Niveaux de Sécurité :"
echo " 0 - Effacement à remplissage zéro en un passage"
echo " 1 - Effacement à remplissage aléatoire en un passage"
echo " 2 - Effacement sécurisé US DoD à 7 passages"
echo " 3 - Algorithme Gutmann à 35 passages d'effacement sécurisé"
echo " 4 - Algorithme US DoE à 3 passages d'effacement sécurisé"
echo ""
echo "Exemples :"
echo " $0 effacer_espace_libre \"/Volumes/Data\" 4 donnees_confidentielles conforme_gdpr"
echo " $0 decouvrir_volumes"
echo " $0 verifier_effacement complet \"/Volumes/Data\""
echo " $0 appliquer_politique medical_hipaa"
;;
esac
}
# Exécuter la fonction principale avec tous les arguments
main "$@"
Considérations de Sécurité
Sécurité de Désinfection des Données
- Écrasement Multi-Passages - Utiliser des niveaux de sécurité appropriés pour la sensibilité des données
- Procédures de Vérification - Vérifier l'effacement complet et l'impossibilité de récupération des données
- Standards de Conformité - Respecter les exigences réglementaires pour destruction de données
- Chaîne de Possession - Maintenir pistes d'audit et documentation
- Sécurité Physique - Considérer la destruction physique pour les besoins de sécurité les plus élevés
Cadre de Conformité
- Conformité GDPR - Droit à l'effacement et exigences de protection des données
- HIPAA Médical - Destruction de dossiers médicaux avec certification appropriée
- SOX Financier - Effacement de données financières avec exigences d'audit
- Standards Gouvernementaux - FISMA, NIST SP 800-88 pour données classifiées
- Standards Industriels - DoD 5220.22-M, Critères Communs pour effacement sécurisé
Guide de Dépannage
Problèmes Courants
Processus d'Effacement Échoue
- Vérifier que le volume n'est pas en cours d'utilisation :
lsof | grep /Volumes/NomVolume
- Vérifier les permissions suffisantes : Exécuter avec
sudo
si nécessaire - Vérifier la santé du disque :
diskutil verifyVolume /Volumes/NomVolume
Performance d'Effacement Lente
- Les niveaux de sécurité plus élevés (3,4) prennent significativement plus de temps
- Différences de performance SSD vs HDD
- La charge système et les ressources disponibles affectent la vitesse
Commandes de Diagnostic
# Lister tous les volumes
diskutil list
# Vérifier les informations du volume
diskutil info /Volumes/NomVolume
# Vérifier l'espace libre
df -h /Volumes/NomVolume
# Surveiller le progrès d'effacement
sudo fs_usage -w -f diskio diskutil
Notes Importantes
- Sauvegarder les Données Critiques - Toujours sauvegarder les fichiers importants avant effacement
- Exigences de Temps - Les niveaux de sécurité plus élevés nécessitent significativement plus de temps
- Noms de Volumes - Échapper les espaces dans les noms de volumes avec des barres obliques inverses
- Sécurité vs Performance - Équilibrer les besoins de sécurité avec les contraintes de temps
- Vérification - Toujours vérifier la complétude de l'effacement pour la conformité
- Documentation - Maintenir des pistes d'audit et certificats appropriés pour la conformité réglementaire