La théorie, c'est de la poussière. L'ombre, c'est du concret. Voici des plans réels, des scripts qui sentent le café froid et la sueur. Des outils que vous allez forger, puis utiliser. Ou qui se retourneront contre vous si vous êtes négligent.
1. Script de Sauvegarde Automatique – archive_noire.sh
Un bon voleur garde toujours une copie. Un bon enquêteur aussi.
#!/usr/bin/env bash
set -euo pipefail
# === CONFIGURATION - À ADAPTER À VOTRE REPAIRE ===
SOURCES=("/home/noir/documents" "/etc/important.conf")
CIBLE_BACKUP="/mnt/safehouse/backups"
RETENTION_JOURS=7
NOM_BACKUP="backup_$(date +%Y%m%d_%H%M%S).tar.gz"
LOG_FILE="/var/log/archive_noire.log"
# === FONCTIONS ===
journaliser() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}
nettoyer_vieux_backups() {
journaliser "Nettoyage des backups vieux de plus de $RETENTION_JOURS jours..."
find "$CIBLE_BACKUP" -name "backup_*.tar.gz" -mtime +"$RETENTION_JOURS" -delete 2>/dev/null || true
}
verifier_espace() {
local pourcentage=$(df "$CIBLE_BACKUP" | awk 'NR==2 {print $5}' | sed 's/%//')
if [[ $pourcentage -gt 90 ]]; then
journaliser "ALERTE : Espace disque critique ($pourcentage%). Abandon."
exit 1
fi
}
# === EXÉCUTION ===
journaliser "=== Début de l'opération Archive Noire ==="
# Vérifications préalables
if [[ ! -d "$CIBLE_BACKUP" ]]; then
journaliser "ERREUR : Le coffre-fort $CIBLE_BACKUP est inaccessible."
exit 1
fi
verifier_espace
# Création de l'archive
journaliser "Création de l'archive : $NOM_BACKUP"
if tar -czf "$CIBLE_BACKUP/$NOM_BACKUP" "${SOURCES[@]}" 2>/dev/null; then
journaliser "SUCCÈS : Archive créée. Taille : $(du -h "$CIBLE_BACKUP/$NOM_BACKUP" | cut -f1)"
else
journaliser "ÉCHEC : Création de l'archive impossible."
exit 1
fi
# Rotation des sauvegardes
nettoyer_vieux_backups
journaliser "=== Opération Archive Noire terminée avec succès ==="
Pour le lancer chaque nuit : crontab -e
0 2 * * * /home/noir/scripts/archive_noire.sh
2. Analyse de Logs – traqueur_anomalies.sh
Les murs ont des oreilles. Les logs ont des secrets.
#!/usr/bin/env bash
# Analyse un fichier de log et signale les activités suspectes
FICHIER_LOG="${1:-/var/log/auth.log}"
SEUIL_TENTATIVES=5
ADRESSE_BANNI="192.168.1.100"
echo "[*] Analyse de $FICHIER_LOG"
echo "----------------------------------------"
# 1. Tentatives de connexion SSH échouées
echo "[+] Tentatives SSH échouées (top 10) :"
grep "Failed password" "$FICHIER_LOG" | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -10
# 2. Succès de connexion SSH (potentielle intrusion)
echo -e "\n[+] Connexions SSH réussies récentes :"
grep "Accepted password" "$FICHIER_LOG" | tail -5
# 3. Alerte si une IP dépasse le seuil
echo -e "\n[+] Détection des attaques par force brute :"
while read -r count ip; do
if [[ $count -gt $SEUIL_TENTATIVES ]]; then
echo " ALERTE : $ip a fait $count tentatives échouées."
fi
done < <(grep "Failed password" "$FICHIER_LOG" | awk '{print $(NF-3)}' | sort | uniq -c)
# 4. Vérification spécifique d'une IP bannie
if grep -q "$ADRESSE_BANNI" "$FICHIER_LOG"; then
echo -e "\n[!] ACTIVITÉ DÉTECTÉE : L'IP bannie $ADRESSE_BANNI apparaît dans les logs."
fi
Usage : ./traqueur_anomalies.sh /var/log/secure
3. Script d'Installation – mise_en_place.sh
Parfois, il faut préparer le terrain. Automatiquement.
#!/usr/bin/env bash
# Mise en place silencieuse d'un environnement de surveillance
set -euo pipefail
echo "[*] Installation de l'environnement 'Vigie'..."
# Vérification des privilèges
if [[ $EUID -ne 0 ]]; then
echo "[ERREUR] Ce script doit être exécuté en root." >&2
exit 1
fi
# Mise à jour et installation des paquets
apt-get update && apt-get install -y \
htop \
net-tools \
curl \
git \
python3-venv \
&& echo "[+] Paquets de base installés."
# Création de l'utilisateur dédié
if ! id "vigie" &>/dev/null; then
useradd -m -s /bin/bash vigie
echo "vigie:Mot2PasseComplexe!" | chpasswd
usermod -aG sudo vigie
echo "[+] Utilisateur 'vigie' créé."
fi
# Configuration du répertoire de travail
VIGIE_HOME="/home/vigie/operation"
mkdir -p "$VIGIE_HOME/logs" "$VIGIE_HOME/scripts"
chown -R vigie:vigie "$VIGIE_HOME"
chmod 750 "$VIGIE_HOME"
# Téléchargement d'un script de surveillance
wget -q -O "$VIGIE_HOME/scripts/surveillance.sh" \
https://gist.githubusercontent.com/ombre/example/raw/surveillance.sh \
&& chmod +x "$VIGIE_HOME/scripts/surveillance.sh"
# Ajout d'une tâche cron pour l'utilisateur vigie
(crontab -u vigie -l 2>/dev/null; echo "*/5 * * * * $VIGIE_HOME/scripts/surveillance.sh") | crontab -u vigie -
echo "[*] Installation terminée. L'environnement 'Vigie' est opérationnel."
echo "[*] Accès : sudo su - vigie"
4. Surveillance de Dossier – veilleur.sh
Quand il faut savoir si quelqu'un a touché aux preuves.
#!/usr/bin/env bash
# Surveille un dossier et alerte en cas de modification
DOSSIER_A_SURVEILLER="${1:-/home/noir/preuves}"
FICHIER_ETAT="$HOME/.etat_dossier.last"
FICHIER_ALERTE="/tmp/alerte_veilleur.txt"
# Capture l'état actuel (empreinte des fichiers)
capturer_etat() {
find "$DOSSIER_A_SURVEILLER" -type f -exec sha256sum {} \; | sort > "$FICHIER_ETAT"
}
# Vérifie les changements
verifier_changements() {
if [[ ! -f "$FICHIER_ETAT" ]]; then
echo "[INFO] Premier lancement. Capture de l'état..."
capturer_etat
return
fi
local fichier_temp=$(mktemp)
find "$DOSSIER_A_SURVEILLER" -type f -exec sha256sum {} \; | sort > "$fichier_temp"
if diff "$FICHIER_ETAT" "$fichier_temp" &>/dev/null; then
echo "[$(date '+%H:%M:%S')] Aucun changement."
else
echo "[$(date '+%H:%M:%S')] ALERTE ! Modifications détectées dans $DOSSIER_A_SURVEILLER" | tee -a "$FICHIER_ALERTE"
echo "Différences :" >> "$FICHIER_ALERTE"
diff "$FICHIER_ETAT" "$fichier_temp" >> "$FICHIER_ALERTE"
# Mettre à jour l'état pour la prochaine vérification
mv "$fichier_temp" "$FICHIER_ETAT"
fi
rm -f "$fichier_temp"
}
# Boucle de surveillance
echo "[*] Veilleur activé sur : $DOSSIER_A_SURVEILLER"
echo "[*] Appuyez sur Ctrl+C pour arrêter."
while true; do
verifier_changements
sleep 30 # Vérifie toutes les 30 secondes
done
5. Menu Interactif en Bash – console_ombre.ps1
Parfois, il faut une interface. Même dans les ténèbres.
#!/usr/bin/env bash
# Menu principal pour les opérations courantes
afficher_menu() {
clear
echo "╔═══════════════════════════════════════╗"
echo "║ CONSOLE OMBRE - Interface Clandestine ║"
echo "╠═══════════════════════════════════════╣"
echo "║ 1. Nettoyer les traces ║"
echo "║ 2. Scanner le réseau local ║"
echo "║ 3. Vérifier l'intégrité des logs ║"
echo "║ 4. Exfiltrer un fichier (chiffré) ║"
echo "║ 5. Surveillance active (tail -f) ║"
echo "║ 6. Quitter ║"
echo "╚═══════════════════════════════════════╝"
echo -n "Choix [1-6] : "
}
nettoyer_traces() {
echo "[*] Lancement du nettoyage..."
read -p " Confirmer (o/N) : " -n 1 -r
if [[ $REPLY =~ ^[Oo]$ ]]; then
rm -f /tmp/*.tmp ~/.bash_history
echo " Nettoyage effectué."
else
echo " Opération annulée."
fi
sleep 2
}
scanner_reseau() {
echo "[*] Scan rapide du réseau local..."
nmap -sn 192.168.1.0/24 2>/dev/null | grep "Nmap scan report" | awk '{print $5, $6}'
read -p "Appuyez sur Entrée pour continuer..."
}
quitter() {
echo "[*] Effacement de l'historique du menu..."
history -c
clear
echo "Console fermée."
exit 0
}
# Boucle principale
while true; do
afficher_menu
read choix
case $choix in
1) nettoyer_traces ;;
2) scanner_reseau ;;
3) ./traqueur_anomalies.sh ;;
4) echo "[!] Fonctionnalité non implémentée." ; sleep 1 ;;
5) echo "[*] Surveillance de /var/log/syslog (Ctrl+C pour arrêter)..." ; tail -f /var/log/syslog ;;
6) quitter ;;
*) echo "[!] Choix invalide." ; sleep 1 ;;
esac
done
Ce sont des plans, des outils. À vous de les forger, de les adapter, de les faire vôtres. L'ombre attend. Le terminal clignote.
Choisissez votre mission.